创建Task
1.new方式实例化一个Task,需要通过Start方法启动
Task task = new Task(() =>{Thread.Sleep(100);Console.WriteLine($"hello, task1的线程ID为{Thread.CurrentThread.ManagedThreadId}");});task.Start();
2.Task.Factory.StartNew(Action action)创建和启动一个Task
Task task2 = Task.Factory.StartNew(() =>{Thread.Sleep(100);Console.WriteLine($"hello, task2的线程ID为{ Thread.CurrentThread.ManagedThreadId}");});
3.Task.Run(Action action)将任务放在线程池队列,返回并启动一个Task
Task task3 = Task.Run(() =>{Thread.Sleep(100);Console.WriteLine($"hello, task3的线程ID为{ Thread.CurrentThread.ManagedThreadId}");});
task.Status
TaskStatus 枚举
Task对象的状态,可以查看当前task对象是在什么状态
task.Wait
Task对象的Wait方法会阻塞主线程,不让主线程继续执行,等当前的task对象完成了才继续
Task.WaitAll
Task
如果Task任务有返回值,返回类型就是Task的繁星类型。用Task对象的Result取返回类型的值
Task<string> task1 = new Task<string>(() =>{Thread.Sleep(1000);return "哈哈哈";});task1.Start();Console.WriteLine(task1.Result);
连续任务
如果一个任务的执行依赖于另一个任务,即任务的执行有先后顺序。此时,我们可以使用连续任务。
task.ContinueWith(ReadNews)表示一个任务task结束后,才开始执行另一个任务。
static void Main(string[] args){Task t1 = new Task(() =>{Thread.Sleep(1000);Console.WriteLine("哈哈哈");});Task t2 = t1.ContinueWith(A);Task t3 = t2.ContinueWith(B);t1.Start();Console.ReadKey();}static void A(Task odj){Thread.Sleep(1000);Console.WriteLine("呵呵呵");}static void B(Task odj){Thread.Sleep(1000);Console.WriteLine("嘿嘿嘿");}//打印结果//哈哈哈//呵呵呵//嘿嘿嘿
