Task是.NET推出数据任务处理的工作类,Task的使用也被越来越多的人讲解,这里仅仅介绍Task的部分使用介绍;

1、Task简单创建

--无返回值

Task.Factory.StartNew(() =>{
Console.WriteLine('Hello World');
});

--返回字符串类型
Task.Factory.StartNew(() =>{
Console.WriteLine('Hello World');
return 'I'm OK !'
});

备注:Task还有Wait方法等待Task任务的完成之后,走下面代码;

2、Task数据同步控制

之所以说控制,是因为Task执行的时候,我们能够通过一个公用的参数变量来控制Task任务的进行,之前我们使用的方式是全局定义一个Bool类型的数据,通过判断该变量值来控制程序的进行;在Task中,我们可以使用CanCellationToken来控制,事例代码如下:

        static CancellationTokenSource CancellTokenSource = new CancellationTokenSource();

        static void MainTask()
{
Task.Factory.StartNew(() => {
while (!CancellTokenSource.IsCancellationRequested)
{
Console.WriteLine("Hello Good");
}
}, CancellTokenSource.Token);
CancellTokenSource.CancelAfter();
}

当然CanCellationToken也是可以交叉使用,如下面事例代码:

        static CancellationTokenSource C1 = new CancellationTokenSource();
static CancellationTokenSource C2 = new CancellationTokenSource();
static CancellationTokenSource C3 = new CancellationTokenSource(); static CancellationTokenSource CancellTokenSource = new CancellationTokenSource(); static void MainTaskMuilte()
{
CancellTokenSource = CancellationTokenSource.CreateLinkedTokenSource(C1.Token, C2.Token, C3.Token); Task.Factory.StartNew(() => {
while (!CancellTokenSource.IsCancellationRequested)
{
Console.WriteLine("Hello Good");
}
}, CancellTokenSource.Token);
C3.CancelAfter();//只要有一个CanCellationToken停掉,该语句就结束
}

3、Task的WhenAny和WhenAll方法介绍:

WhenAny表示任意一个Task完成之后,返回这个Task对象,但是有时候我们需要等待任务的完成,比如竞赛,只有有一个人完成,WhenAny就会返回这个人内容(有点不太切合实际),WhenAll表示处理完成之后,返回所有对象实例,代码如下:

        public async void OpeartTask()
{ List<Task<string>> TaskList = new List<Task<string>>() {
Task.Factory.StartNew(()=> { return WriteHello(); },C1.Token),
Task.Factory.StartNew(()=> { return WriteHello(); },C1.Token),
Task.Factory.StartNew(()=> { return WriteHello(); },C1.Token),
Task.Factory.StartNew(()=> { return WriteHello(); },C1.Token)
};
//var Reuslt= await Task.WhenAll(TaskList);
var Reuslt = await Task.WhenAny(TaskList);
if (Reuslt.IsCompleted)
{
Console.WriteLine("I'm "+Reuslt.Result+" OK,Other Must Stop");
C1.Cancel();
}
}

备注:等待的时候,要加上async 和 await;

4、Task.AwaitAll等待所有Task执行完成,该操作是同步完成;

Task使用小结的更多相关文章

  1. [C#] async 的三大返回类型

    async 的三大返回类型 序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task&l ...

  2. Angular动态创建组件之Portals

    这篇文章主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的知识点,如:Angular多级依赖注入.ViewContainerRef,Por ...

  3. Netty学习笔记(三)——netty源码剖析

    1.Netty启动源码剖析 启动类: public class NettyNioServer { public static void main(String[] args) throws Excep ...

  4. 《Applying Deep Learning to Answer Selection: A Study And an Open Task》文章理解小结

    本篇论文是2015年的IBM watson团队的. 论文地址: 这是一篇关于QA问题的一篇论文: 相关论文讲解1.https://www.jianshu.com/p/48024e9f7bb22.htt ...

  5. gulp使用小结(二)

    接上篇文章接Gulp使用小结(一) 内容如下: 首先,偶在gulp-demos上已经提交了个较通用的栗子...俺琢磨半天,原准备分阶段搞些 Gulp 套路,但是写完介个栗子之后,觉得已经能覆盖绝大多数 ...

  6. Activity、Task、应用和进程

    http://www.cnblogs.com/franksunny/archive/2012/04/17/2453403.html Activity.Task.应用和进程 为了阅读方便,将文档转成pd ...

  7. RestSharp用法小结

    今天有空,小结一下RestSharp的用法. RestSharp内置了XML和JSON的反序列化(deserializers ). application/json – JsonDeserialize ...

  8. Apache Spark源码走读之3 -- Task运行期之函数调用关系分析

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚运行着的task其输入的数据从哪获取,处理的结果返回到哪里,如何 ...

  9. C#中假设正确使用线程Task类和Thread类

    C#中使用线程Task类和Thread类小结 刚接触C#3个月左右.原先一直使用C++开发.由于公司的须要,所地採用C#开发.主要是控制设备的实时性操作,此为背景. 对于C#中的Task和Thread ...

随机推荐

  1. 如何学习caffe

    知乎上的讨论:https://www.zhihu.com/question/27982282 从0开始山寨caffe系列:http://www.cnblogs.com/neopenx/archive/ ...

  2. servlet部分知识总结

    1.解决中文显示乱码问题: 对于servlet :servlet里面加入代码response.setContentType("text/html;chartset=utf-8"); ...

  3. FTP 传输中的主动模式和被动模式

    最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同.在此重温一下FTP的 ...

  4. SpringMVC基础入门

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...

  5. centos7 关闭firewall安装iptables并配置

    一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  6. 使用PopupWindow

    PopupWindow可以用来实现弹出任意位置的菜单,比Context Menu和Option Menu灵活性更高.Android中弹出一个PopupWindow基本有两个方法: 1 2 //Disp ...

  7. dp水题 序列问题 (9道)

    9道题.A了8道,A题看题解也没弄懂怎么维护m段子序列的,过一段时间再回来看看     dp试水 47:56:23 125:00:00   Overview Problem Status Rank ( ...

  8. pycharm3.4 下svn 项目checkout&配置

    pycharm 社区版: 3.4 1. checkout 项目 注意,之前配置好:设置里面的一些配置:(以下勾勾不要勾上) 2. checkout 项目之后,做以下操作: vcs ->enabl ...

  9. SQL Server 2008 R2 Developer (x86, x64, ia64) – DVD (Chinese-Simplified)

    http://blog.sina.com.cn/s/blog_4aedf6370101j9tz.html 1. SQL Server 2008 R2 Developer (x86, x64, ia64 ...

  10. 注册页面的js验证

    简单的用户注册页面:(html) 包含用户名格式验证.邮箱格式验证.确认密码一致性验证和必填项验证.(纯javascript) <center> <h1>用户注册</h1 ...