一、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参数传递中也有介绍。
提示:本人准备建立一个技术交流群,会将日常学习工作中遇到的问题和解决方案进行分享,同时也会将代码和学习资料上传进去,有什么不懂的问题可以咨询我!+v:SJS66-12
生活所迫打个广告,本人也代购莆田鞋,不是中间商,工厂直接取货,价格优惠质量保证,都是我自己前去挑选,可以视频选购验货!!希望大家支持!!!赚点生活费!!!+v:SJS66-12
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只有当直线任务返回才会执行。