Asp.net

ASP.NET MVC4 非同步控制器 - 為什麼要使用?

  • March 3, 2013

我試圖了解為什麼以及何時應該使用async控制器操作。最終,當我在其中使用await時,它將等待操作完成以返回視圖。

例如

public async Task<ActionResult> TryMe()
{
  await SomeActionAsync();
  return View();
}

在這種情況下,如果我使用async或不使用asyncAction將需要相同的時間來執行。

如果我不嘗試並行執行至少 2 個慢速操作(彼此不依賴),我看不出有任何理由使用async控制器操作。

如果我錯了,請糾正我。我想我在這裡遺漏了一些東西。

關鍵字的重點await是讓您使用非同步操作而無需編寫醜陋的回調。

使用非同步操作有助於避免浪費執行緒池執行緒。

解釋

ASP.Net 在託管執行緒池的執行緒中執行所有程式碼。

如果一次執行的慢請求太多,執行緒池將滿,新的請求需要等待執行緒釋放。

然而,通常情況下,您的請求很慢不是因為它們正在執行計算(計算綁定),而是因為它們正在等待其他東西,例如硬碟、數據庫伺服器或外部 Web 服務(IO 或網路-邊界)。

僅僅為了等待外部操作完成而浪費寶貴的執行緒池執行緒是沒有意義的。

非同步操作允許您啟動操作,將執行緒返回到池中,然後在操作完成時在不同的執行緒池執行緒上“喚醒”。

在操作執行時,不消耗任何執行緒。

引用自:https://stackoverflow.com/questions/15190112