MoX*_*lod 4 .net c# asp.net asynchronous async-await
我有以下两种方法,我用来点火并忘记调用http网址.起初,我使用ThreadPool.QueueUserWorkItem,但推荐使用异步等待,由于线程耗尽的担忧,因为这种方法可能会被频繁调用.
第一个问题是哪个更好?
第二个问题 - 异步等待实现是否正确?当我通过它进行调试时,它似乎是同步的,这是一个大问题,因为我需要它来释放调用的asp.net线程并将响应返回给用户而无需等待http调用完成.
致电 -
Send("http://example.com");
Run Code Online (Sandbox Code Playgroud)
方法-
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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
ASYNC/AWAIT -
致电 -
await SendAsync("http://example.com");
Run Code Online (Sandbox Code Playgroud)
方法 -
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);
}
}
Run Code Online (Sandbox Code Playgroud)
第一个问题是哪个更好?
都不是.我建议你至少使用类似的东西注册ASP.NET运行时的工作HostingEnvironment.QueueBackgroundWorkItem; 我在博客上描述了这个和其他方法.
第二个问题 - 异步等待实现是否正确?当我通过它调试时,它似乎是同步的
它是异步的,但你在等待它.这告诉ASP.NET在完成该工作之前不能完成其响应.所以,它不是"火与忘记".
我需要它来释放调用asp.net线程并将响应返回给用户,而无需等待http调用完成.
正如目前所写,它释放了线程,但延迟返回响应,直到HTTP调用完成.
| 归档时间: |
|
| 查看次数: |
3397 次 |
| 最近记录: |