我們常常會遇到需要利用并行處理,盡量發揮多核或多CPU的潛能,提高程式運作效率的場景。在.NET環境下,常用的做法是使用Thread,多線程方式進行并行處理。但在.Net4.0中,微軟提供一種新的概念——Task(任務),換句話說,并行處理由“多線程”進化為了“多任務”的方式。
一、利用Task實作多任務處理
測試1:
以下為測試過程,模拟多次調用一耗時方法,分别使用串行、多線程方式、多任務方式:
1、建立一虛拟耗時的方法
2、傳統串行調用方式、多線程調用、多任務調用
3、模拟執行過程,統計過程用時
4、執行結果截圖

結論:從結果可以看出多線程或多任務的性能明顯高于串行方式。多線程或多任務執行效率差別不大,.NET架構底層實作可能大緻相同。但多任務的代碼寫法更為簡潔,也更為靈活。
二、利用Task實作并行、串行的執行順序定義
測試2::
1、假定A、B、C、D、E 多任務的執行順序為:A、B 執行後,執行C,A 執行後,執行 D, B 執行後,執行 E
執行時的測試方法如下(即執行時顯示執行的名稱,并按傳入的時間參數,決定程序休眠的時間):
2、測試方法(傳統串行、串并行結合)
假定各任務分别耗時為A(5秒)、B(5秒)、C(2秒)、D(1秒)、E(2秒)。則串行需用時5+5+2+1+2=15 秒,串并行結合(A、B -> C,A -> D,B -> E) 需用時 5+2 = 7 秒.
測試程式如下:
3、執行結果截圖
結論:與測試預想結果一緻
實作的關鍵代碼:
請注意以上使用工廠方式獲得的任務執行個體,與之前介紹的Parallel.Invoke 方式,二者有很重要的差別:工廠方式擷取任務執行個體後即配置設定給系統委托,不受目前調用的方法限制;但invoke方式,括号内部聲明的多個任務,必須全部執行結束,才會跳出invoke,回到目前調用的方法中。