0%

【C#】Task WaitAll

情境

假設有一項任務,執行時會做三件事情,而這三件事情彼此並沒有相依關係,傳統程式寫法通常都是 1 > 2 > 3 依序呼叫下去做,但這樣有一個問題就是,假設 1 這個任務要執行特別久,那 2、3 都得等 1 做完才能執行到,整體來說效率並沒有最佳化。

/images/20181203/1.png

跑一次需要 2.012 秒完成,如果需要重複 10 次 、100 次,那所需時間會相當可觀。

非同步版本

改成非同步版本後,它執行順序就不會被第一步給拖累,三個工作是併行處理

/images/20181203/2.png

但這會有一個問題,如果程式是 Run 在 Console Application 中,因為沒有等待非同步的程式都執行完,就已經跑到 Done ,而導致 Console Application 被關掉,其相應的 Process 也會被停掉,導致有些工作沒有執行完,所以必須要確保所有程式都執行完才關閉的機制在。

/images/20181203/3.png

參考文章

  1. MSDN : 以工作為基礎的非同步程式設計