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)线程

 

posted @ 2021-08-19 21:42  旭日阳光/hjw  阅读(35)  评论(0)    收藏  举报