1. 程式人生 > >.Net Core WebAPI 基於Task的同步&異步編程

.Net Core WebAPI 基於Task的同步&異步編程

task style cnblogs spa 表示 span ima () lin

await 和 async

異步的實質就是線程的切換(遇到await),同一請求下,異步和同步的執行時間是一樣的,但有人說異步可以提高XXX性能,但具體是什麽性能呢?又說不上來,其實就只提高並發量,並不能提升你應用程序處理的速度

使用異步的目的是用盡量少的線程保證相同的並發量。

線程的總數少了,線程切換消耗的資源就小了,相對來提供給客戶任務的資源就多了,性能就在這裏。

CPU 在大量線程的情況下,20%的時間片在線程切換上,客戶任務有80%的資源使用。

減少了線程數,只有5%的時間片消耗在線程切換,客戶任務有95%的資源使用。

減少不必要的線程等待,原來線程工作50%+等待閑置50%,現在把等待閑置50%省掉,就會提升1倍的性能。

https://www.cnblogs.com/xishuai/p/asp-net-async-await-and-exception-handling.html

在方法定義返回類型的前面增加async關鍵字表示該方法為異步方法。

而返回值必須是void 或者為Task<T>。T為返回值的類型;

在調用被async修飾過的異步方法時可以使用await關鍵字變為同步方法,語法為調用前增加await關鍵字;string result = await loadString();

  • 方法名稱一般是Async 結尾。
  • 可以包含一個或者多個await表達式。
  • 異步方法的參數不能使用ref和out參數。
  • 方法頭包含async關鍵字,並且在返回類型之前。
  • 除了方法之外, Lambda 表達式和匿名函數也可以作為異步對象。

技術分享圖片

async void

該方式聲明的方法是無法使用 catch 捕獲異常的,所以以下代碼的 try、catch 並沒什麽卵用。

技術分享圖片

在 Task 上加上 ConfigureAwait(false),此設置代表當 async 中的異步任務完成後,不讀取當時調用它的原線程的上下文信息,而是在線程池上下文中執行 async 方法的剩余部分。

技術分享圖片

技術分享圖片

Task

https://www.cnblogs.com/viter/p/10201228.html

技術分享圖片

.Net Core WebAPI 基於Task的同步&異步編程