需要在.Net 4.0才会有Task

当然,既然接触到了Task,或许以后就不再用线程了,具体看情况了,之前几个线程之间就发生了阻塞问题,这次就是要解决这个问题才下这个功夫的,否则宁可被差遣抱儿子尿尿去。

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Threading; namespaceTaskDemo { classProgram { staticvoidMain(string[]args) { ThreadmTH=newThread(RunTask); mTH.Start(); //ThreadmTH1=newThread(RunThread); //mTH1.Start(); } privatestaticvoidRunThread() { for(inti=0;i<20;i++) { Thread.Sleep(2); Console.WriteLine("RunThread{0}",i); } } privatestaticvoidRunTask() { try{ intmCount=0; CancellationTokenSourcetokenSource=newCancellationTokenSource(); CancellationTokentoken=tokenSource.Token; Taskt=newTask(()=> { Console.WriteLine("进入任务……"); Thread.Sleep(10); Console.WriteLine("任务开始工作……"); //模拟工作过程 for(inti=0;i<20;i++) { if(token.IsCancellationRequested==true) { break;//这里别人是用一个thrownewOperationCanceledException(token);但是我用就会报错 } mCount++; Console.WriteLine("RunTask{0}",i); Thread.Sleep(1); } },token); token.Register(()=> { Console.WriteLine("Canceled"); }); t.Start(); Console.WriteLine("这条语句先运行完毕了……"); t.ContinueWith((task)=> { Console.WriteLine("任务完成,完成时候的状态为:"); Console.WriteLine("IsCanceled={0}\tIsCompleted={1}\tIsFaulted={2}\tmCount={3}",task.IsCanceled,task.IsCompleted,task.IsFaulted,mCount); }); Console.WriteLine("现在就按任意键的话,程序就退出了……"); RunThread();//线程内部较耗时的测试 Console.ReadKey();//由于两个sleep都有点时间,如果在这时间之前按下任意键,结果是程序提前终止了 tokenSource.Cancel(); Console.ReadKey();//程序退出 } catch(ExceptionEx) { Console.WriteLine(Ex.Message); } } } }