Task是建立在线程池之上的一种多线程技术,它的出现使Thread成为历史。Task是目前首推的多线程使用方法,简单使用主要从三方面进行介绍:
1、开启线程的方式
2、有参传递
3、有返回值传递
- //第一种方法
- Task task = new Task(() =>
- {
- console.writeLine("第一种方法");
- });
- task.Start();//开启了一个新的线程
-
- //第二种方法
- Task.Run(() =>
- {
- console.writeLine("第二种方法");
- });
-
- //第三种方法
- TaskFactory taskFactory = Task.Factory;
- taskFactory.StartNew(() =>
- {
- console.writeLine("第三种方法");
- });
- //有参传递
- 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
- //获取返回值方式一
- 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只有当直线任务返回才会执行。