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. net-snmp子代理(SubAgent)编写详述

    net-snmp子代理(SubAgent)编写 net-snmp子代理(SubAgent)编写 Netsnmp_Node_Handler MIB/OID定义 1.头文件test.h的编写 2.test ...

  2. net-snmp的MIBs扩展(linux下)

    net-snmp的MIBs扩展 net-snmp的MIBs扩展 1 编译安装net-snmp 2 编写MIB文件 MIB文件描述 一个简单的示例 3 使自定义的MIB文件生效 4 实现agent代理程 ...

  3. gollum安装教程

    在线markdown编辑器,可以直接将该程序安装在服务器上,直接编辑完之后保存在gollum目录下 1.在线安装     sudo apt-get install ruby1.9.1 ruby1.9. ...

  4. 有向图寻找(一个)奇环 -- find an oddcycle in directed graph

    /// the original blog is http://www.cnblogs.com/tmzbot/p/5579020.html , automatic crawling without l ...

  5. malloc/free与new/delete的区别

    相同点:都可用于申请动态内存和释放内存 不同点:(1)操作对象有所不同.malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符.对于非内部数据类的对象而言,光用m ...

  6. Linux设置交换分区swap

    参考: http://www.vpser.net/opt/vps-add-swap.html https://www.zntec.cn/archives/vps-swap.html http://yz ...

  7. Javascript之setTimeout

    参考:http://codethoughts.info/javascript/2015/07/06/javascript-callbacks/

  8. delphi的取整函数round、trunc、ceil和floor

    delphi的取整函数round.trunc.ceil和floor 首先引入math单元 uses math; 1.Round(四舍六入五留双) 功能说明:对一个实数进行四舍五入.(按照银行家算法) ...

  9. FASTREPORT 整理 (mtm)

    DELPHI中用FASTREPORT制作报表  1.加载并存储报表 默认情况下,报表窗体同项目窗体构存储在同一个DFM文件中.多数情况下,无须再操作,因而你就不必采用特殊方法加载报表. 如果你决定在文 ...

  10. selenium 配合sikuli script操作高德地图

    会不会使用工具,是一般QA和高级QA的区别 ---To be crazy Java就是好,开源框架遍地都是,各种niubility的jar包,各种神器,真是不亦乐乎. 今天研究一下基于图片识别作为对象 ...