ASP.NET Async & Await
本文关键字:Await amp NET Async ASP | 更新日期: 2023-09-27 18:13:09
我有一个ASP。我正在对它进行负载测试,我设法通过使用外部工具运行并发请求来阻止线程池中的所有线程。由于网络上的I/O请求,所有线程都被阻塞,而正在阻塞的方法是用async和await关键字实现的。我在另一个控制器中还有另一个方法它只返回一个字符串,也就是说,第二个方法不做I/o
问题是:即使所有线程都在做异步I/O,对这个非阻塞方法的所有请求都应该被服务吗?
调用异步实现的方法时仍然可以阻塞。
public async Task GetFooAsync()
{
await DoSomethingElseAsync();
}
public static void MySyncMethod()
{
GetFooAsync().Wait();
}
通过调用.Wait()
,我阻塞了线程。该方法是否使用async/await实现并不重要。.Result
异步方法需要"全程异步"使用——这意味着为了不阻塞,整个调用堆栈必须是异步的。在ASP中。NET应用程序,这意味着你从控制器中的async方法开始。如果控制器方法是同步的,调用异步方法仍然会阻塞。
请参阅这篇MSDN文章中的"async all way"。你也可以在第九频道观看async/await的基本技巧。