gpt4 book ai didi

c# - 触发并忘记使用 ThreadPool.QueueUserWorkItem 或异步等待?

转载 作者:太空狗 更新时间:2023-10-30 00:40:48 26 4
gpt4 key购买 nike

<分区>

我有以下两种方法,我用它们来触发并忘记对 http url 的调用。最初我使用的是 ThreadPool.QueueUserWorkItem,但由于担心线程耗尽,建议使用 Async Await,因为此方法可能会被频繁调用。

第一个问题是哪个更好?

第二个问题 - async await 实现是否正确?当我调试它时,它似乎是同步的,这是一个大问题,因为我需要它来释放调用的 asp.net 线程并将响应返回给用户,而无需等待 http 调用完成。

调用 -

Send("http://example.com");

方法-

public static void Send(string url)
{
ThreadPool.QueueUserWorkItem(
o =>
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
request.Timeout = 5000;
var response = request.GetResponse();
response.Close();
}
catch (Exception ex)
{
SendException(ex, url);
}
});
}

异步/等待 -

调用 -

await SendAsync("http://example.com");

方法-

public async static Task SendAsync(string url)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
request.Timeout = 5000;
var response = await request.GetResponseAsync().ConfigureAwait(false);
response.Close();
}
catch (Exception ex)
{
SendException(ex, url);
}
}

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com