Task是一種基于任務(wù)的編程模型。它與thread的主要區(qū)別是,它更加方便對線程進(jìn)程調(diào)度和獲取線程的執(zhí)行結(jié)果。
Task類和Task類,前者接收的是Action委托類型,后者接收的是Func委托類型。
Task創(chuàng)建:
(1)直接創(chuàng)建
var task1 = new Task(() =>{System.Threading.Thread.Sleep(1000);});
task1.Start();
(2)工廠創(chuàng)建
Task.Factory.StartNew(() = {});
(3)Run運(yùn)行
Task.Run(() =>{});
注:
開啟新任務(wù)的方法:Task.Run()或者Task.Factory.StartNew(),開啟的是后臺線程
要在主線程中等待后臺線程執(zhí)行完畢,可以使用Wait方法(會以同步的方式來執(zhí)行)。不用Wait則會以異步的方式來執(zhí)行。
thread和Task的區(qū)別,thread new多少個就會創(chuàng)建多少個線程,而task是利用線程池中的線程。
Task其他方法:
Task.Wait(); 阻塞當(dāng)前線程
Task.WaitAll(); 阻賽當(dāng)前線程
Task.WaitAny(); 阻塞當(dāng)前線程直到有任意一個任務(wù)執(zhí)行完畢
Task.ContinueWith(task=>{});執(zhí)行完上一個任務(wù)后繼續(xù)執(zhí)行,并將上一個任務(wù)傳遞給下一個代碼塊