1.偏向處理IO bound(讀取記憶體/硬碟密集),但CPU Loading較低的工作,
如:讀文件、資料庫、網路要求資料(webservice)
2.是並行處理 concurrent, 與平行處理不同
3.一般建議任何方法(method)超過50ms才能完成,建議改非同步
4.4~5條thread就很夠處理一般程式(ex.賽車換輪胎範例)
5.非同步目的是提高執行效能與回應速度
6.thread safey : 多執行序環境下也可以確保得到預期結果
7.Critical Section: 任意一段程式碼,不允許多執行緒同時執行這段程式碼 ex.lock
8.Deadlock: 當兩個執行緒都嘗試鎖定另一個執行緒已經鎖定的資源時,就會發生死結,導致兩個執行緒都不能繼續執行
9.Context Switch: thread 記錄當下狀態,並換成其他thread(是會消耗成本)
10.非同步進程 : APM, EAP, TPL, TAP
11.blocking thread, 建議不用 .result wait waitall .thread join等會讓執行等待的方式, 改用WhenAll(tasks),await
12.不要混用同步與非同步方法
13.正常情況,不要使用 async void MethodAsync(){}, 改用回傳Task才能捕捉異常與執行結果
14.await Task.Delay 替代 Thread.Sleep