C#学习相关系列之多线程(六)----Task的初级使用

简介: C#学习相关系列之多线程(六)----Task的初级使用

一、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只有当直线任务返回才会执行。


相关文章
|
1月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
1月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
1月前
|
C#
C#学习系列相关之多线程(二)----Thread类介绍
C#学习系列相关之多线程(二)----Thread类介绍
|
1月前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
22 0
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
79 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
61 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
62 0
|
4月前
|
数据采集 前端开发 C#
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频
Twitter是全球最大的社交媒体平台之一,包含丰富的音频资源。用户可以在Twitter上发布、转发、评论和收听各种音频内容,如音乐、播客、新闻、故事等,直接从Twitter抓取音频数据并非易事,尤其是在考虑到可能的封锁和反爬虫机制。Twitter会对频繁访问的IP地址进行限制或封禁,以防止恶意爬虫的行为。因此,我们需要使用一些技术手段来规避这些障碍,确保稳定而高效的数据访问。
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频
|
3月前
|
程序员 C#
深入理解 C# 编程:枚举、文件处理、异常处理和数字相加
枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。 要创建枚举,请使用 enum 关键字(而不是 class 或 interface),并用逗号分隔枚举项:
40 0