摘要:非同步方法與執行緒

  • 991
  • 0

非同步方法與執行緒

第一、非同步方法傾向於成為一個non-blocking operation:當一個應用程式僅有分配到一個執行緒,而此一執行緒在負責長期間的作業(如擷取遠端網站的資料)時,將無法兼顧使用者與應用程式的人機互動,導致整個應用程式的人機介面暫時無法正常運作,而非同步方法可以解決此一問題。

第二、async與await關鍵字並不會建立額外的新執行緒,async也不需要multi-threading:Task.Run可以將CPU-bound的工作轉交給背景執行緒。背景執行緒並不會協助負責人機互動的執行緒處理同步的工作與人機互動,但是負責人機互動的執行緒會等待背景執行緒的工作結果。

第三、async-based的方法是非同步程式設計中最好的方法:async-based不僅優於負責IO-bound的Background Worker Class(不必耗費額外的心力在race condition),倘若與Task.Run結合,同時也優於負責CPU-bound的Background Worker Class。因為async-based方法將程式設計師所撰寫的程式碼的協同合作的細節自Task.Run分離至Thread Pool。

 

參考資料來源:

[1]Threads
http://msdn.microsoft.com/en-us/library/hh191443.aspx#BKMK_Threads

 

補充資料來源:

[1]Task.Run Method
http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.run.aspx

[2]BackgroundWorker Class
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

[3]Task-based Asynchronous Pattern
http://www.microsoft.com/en-us/download/details.aspx?id=19957