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