A_07 Task操作详解
ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:
◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作;
◆ ThreadPool不支持线程执行的先后次序;
//1、创建任务 var t1 = new Task(() => TaskMethod("Task 1")); t1.Start(); Task.WaitAll(t1);//等待所有任务结束 Task.Run(() => TaskMethod("Task 2")); Task.Factory.StartNew(() => TaskMethod("Task 3")); 直接异步的方法 //或者 var t3=Task.Factory.StartNew(() => TaskMethod("Task 3")); Task.WaitAll(t3);//等待所有任务结束 //获取返回值 Task<int> task = CreateTask("Task 1"); task.Start(); int result = task.Result; // 2、组合任务.ContinueWith Task t2= t1.ContinueWith(t => { Console.WriteLine("任务完成后的执行结果:{0}", t.Result.ToString()); }); // 3、并行任务 Task.WaitAll(t2, t3); //4、 动态并行(TaskCreationOptions.AttachedToParent) 父任务等待所有子任务完成后 整个任务才算完成 // 5、取消任务 CancellationTokenSource //5、创建带返回值的 Task.FromResult //7、使用IProgress实现异步编程的进程通知,可将任务线程中的信息通知主(ui)线程