1.启动任务

classProgram{staticvoidMain(string[]args){//三种启动任务方式//第一种TaskFactorytf1=newTaskFactory();Taskt1=tf1.StartNew(TaskMethod);//第二种Taskt2=Task.Factory.StartNew(TaskMethod);//第三种Taskt3=newTask(TaskMethod);t3.Start();Console.ReadKey();}privatestaticvoidTaskMethod(){Console.WriteLine("TaskID:{0}",Task.CurrentId);}}

2,连续任务

classProgram{staticvoidMain(string[]args){Taskt1=newTask(GetTask);Taskt2=t1.ContinueWith(NewTask);Taskt3=t2.ContinueWith(NewTask2);t1.Start();Console.ReadKey();}privatestaticvoidGetTask(){Console.WriteLine("GetTask:{0}",Task.CurrentId);Thread.Sleep(1000);}privatestaticvoidNewTask(Taskt){Console.WriteLine("NewTask:{0},pTask:{1}",Task.CurrentId,t.Id);}privatestaticvoidNewTask2(Taskt){Console.WriteLine("NewTask2:{0},pTask:{1}",Task.CurrentId,t.Id);}}

3,任务的层次结构

classProgram{staticvoidMain(string[]args){a1();Console.ReadKey();}privatestaticvoida1(){Taskt=newTask(a2);Console.WriteLine("a1开始:{0}",t.Status);//a2任务状态:Created(该任务已初始化,但尚未被计划)t.Start();Console.WriteLine("a1过程:{0}",t.Status);//a2任务状态:WaitingToRun(该任务已被计划执行,但尚未开始执行)Thread.Sleep(3000);Console.WriteLine("a1结束:{0}",t.Status);//a2任务状态:RanToCompletion(成功执行了任务)}privatestaticvoida2(){Console.WriteLine("a2:{0}",Task.CurrentId);Taskt=newTask(a3);t.Start();}privatestaticvoida3(){Console.WriteLine("a3:{0}",Task.CurrentId);}}

4,任务的结束

classProgram{staticvoidMain(string[]args){Task<string>t=newTask<string>(GetString,"你好");t.Start();Console.WriteLine(t.Result);Console.ReadKey();}privatestaticstringGetString(objects){returns.ToString();}}

============================续.......................

任务类似于线程

TaskStatus 枚举成员名称说明Canceled该任务已通过对其自身的 CancellationToken 引发 OperationCanceledException 对取消进行了确认,此时该标记处于已发送信号状态;或者在该任务开始执行之前,已向该任务的 CancellationToken 发出了信号。有关详细信息,请参阅任务取消。Created<?xml:namespace prefix="[default]" xhtml="" ns="http://www.w3.org/1999/xhtml">该任务已初始化,但尚未被计划。?xml:namespace>Faulted由于未处理异常的原因而完成的任务。RanToCompletion已成功完成执行的任务。Running该任务正在运行,但尚未完成。WaitingForActivation该任务正在等待 .NET Framework 基础结构在内部将其激活并进行计划。WaitingForChildrenToComplete该任务已完成执行,正在隐式等待附加的子任务完成。WaitingToRun该任务已被计划执行,但尚未开始执行。

Taskt=newTask(()=>{Thread.Sleep(10000);Console.WriteLine("Task:{0}",Task.CurrentId);Console.WriteLine("thread:{0}",Thread.CurrentThread.ManagedThreadId);});//开始执行任务t.Start();//等待任务完成(线程阻塞)t.Wait();//当处理完成任务之后输出if(t.Status==TaskStatus.RanToCompletion)Console.WriteLine("Main:{0}",Thread.CurrentThread.ManagedThreadId);Console.ReadKey();