一、Task的简介
Task是建立在线程池之上的一种多线程技术,它的出现使Thread
成为历史。Task是目前首推的多线程使用方法,简单使用主要从三方面进行介绍:
1、开启线程的方式
2、有参传递
3、有返回值传递
二、代码示例:
1、开启线程的三种方式
//第一种方法 Task task = new Task(() => { console.writeLine("第一种方法"); }); task.Start();//开启了一个新的线程 //第二种方法 Task.Run(() => { console.writeLine("第二种方法"); }); //第三种方法 TaskFactory taskFactory = Task.Factory; taskFactory.StartNew(() => { console.writeLine("第三种方法"); });
2、有参传递
//有参传递 int a=1o; int b=5; public static void do(int a,int b) { int c=a+b; } Task.Run(()=>{do(a,b)});
对于参数的传递只能是定义一个有参函数,将参数定义为外部变量。第二种方法定义为结构体,在Thread参数传递中也有介绍。
3.有返回值的传递
//获取返回值方式一 Task<int> result = Task.Run<int>(() => { Thread.Sleep(2000); return DateTime.Now.Year; }); int iResult = result.Result; //会卡界面等待 //获取返回值方式二 Task.Run<int>(() => { Thread.Sleep(2000); return DateTime.Now.Year; }).ContinueWith(intT => //开启一个延续任务 { int i = intT.Result; });
其中result可以看作是Task任务的句柄,当主线中result得到结果时候,在iresult=result.result会一直卡停,等待支线程返回result,result只有当直线任务返回才会执行。