Parallel類(http://www.cnblogs.com/afei-24/p/6904179.html)的并行任務需要結(jié)束后才能運行后面的代碼,如果想不等結(jié)束后在開始動作,可以使用Task類更好地控制并行動作。
任務表示應完成的某個工作單元。這個工作單元可以在單獨的線程中運行,也可以以同步方式啟動一個任務,這需要等待主調(diào)線程。使用任務不僅可以獲得一個抽象層,還可以對底層線程進行很多控制。
任務相對Parallel類提供了非常大的靈活性。例如,可以定義連續(xù)的工作——在一個任務完成后該執(zhí)行什么工作。這可以根據(jù)任務成功與否來分。還可以在層次結(jié)構(gòu)中安排任務。例如,父任務可以創(chuàng)建新的子任務。
一.啟動任務
要啟動任務,可以使用TaskFactory類或Task類的構(gòu)造函數(shù)和Start()方法。Task類的構(gòu)造函數(shù)在創(chuàng)建任務上靈活性比較大。
在啟動任務時,會創(chuàng)建Task類的一個實例,利用Action或Action<T>委托(不帶參數(shù)或帶一個參數(shù)),可以指定應運行的代碼。
1.使用線程池的任務
線程池提供了一個后臺線程的池(后面詳細介紹了線程池)。線程池獨自管理線程,根據(jù)需要增加或減少線程池中的線程數(shù)。線程池中的線程用于實現(xiàn)一些動作,之后仍然返回線程池中。
下面介紹創(chuàng)建線程池的任務的四種方法:
先定義一個要調(diào)用使用的方法:
//避免寫入控制臺的操作交叉,這里使用lock關(guān)鍵字同步 static object taskMethodLock = new object(); static void TaskMethod(object title) { lock (taskMethodLock) &n