[英]ASP.NET Async & Await
我有一個ASP.NET應用程序。 我正在對其進行負載測試,並設法通過使用外部工具運行並發請求來從線程池中阻止所有線程。 由於通過網絡的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應用程序中,這意味着您從控制器中的異步方法開始。 如果控制器方法是同步的,則調用異步方法仍然會阻塞。
請參閱此MSDN文章中的 “一路異步”。 您可能還希望在Channel 9上觀看這些用於異步/等待的基本提示 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.