Task是一种基于任务的编程模型。它与thread的主要区别是,它更加方便对线程进程调度和获取线程的执行结果。
Task类和thread类,前者接收的是Action委托类型,后者接收的是Func委托类型。
Task创建:
(1)直接创建
var task1 = new Task(() =>{System.Threading.Thread.Sleep(1000);});
task1.Start();
(2)工厂创建
Task.Factory.StartNew(() = {});
(3)Run运行
Task.Run(() =>{});
注:
开启新任务的方法:Task.Run()或者Task.Factory.StartNew(),开启的是后台线程
要在主线程中等待后台线程执行完毕,可以使用Wait方法(会以同步的方式来执行)。不用Wait则会以异步的方式来执行。
thread和Task的区别,thread new多少个就会创建多少个线程,而task是利用线程池中的线程。
Task其他方法:
Task.Wait(); 阻塞当前线程
Task.WaitAll(); 阻赛当前线程
Task.WaitAny(); 阻塞当前线程直到有任意一个任务执行完毕
Task.ContinueWith(task=>{});执行完上一个任务后继续执行,并将上一个任务传递给下一个代码块。