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. 剑指Offer 反转链表

    题目描述 输入一个链表,反转链表后,输出链表的所有元素.     思路: 法1:用栈,压栈出栈 法2:头插法(有递归非递归2中)   AC代码: /* struct ListNode { int va ...

  2. BZOJ 3942: [Usaco2015 Feb]Censoring

    Description 有两个字符串,每次用一个中取出下一位,放在一个字符串中,如果当前字符串的后缀是另一个字符串就删除. Sol KMP+栈. 用一个栈来维护新加的字符串就可以了.. 一开始我非常的 ...

  3. python入门教程链接

    python安装 选择 2.7及以上版本 linux: 一般都自带 windows: https://www.python.org/downloads/windows/ mac os: https:/ ...

  4. Python tab键自动补齐

    1.进入root家目录  建立.tab文件 .tab文件内容如下: ############################################## import sys import r ...

  5. css position属性

    absolute, 屏幕为参照, 但固定在页面上,随页面滚动而动. fixed, 父元素没有指定position属性(或position属性为static时)==>屏幕为参照,固定在屏幕的某个位 ...

  6. cf219d

    树形dp #include <cstdio> #include <vector> using namespace std; #define D(x) const int INF ...

  7. Html5 postMessage

    解释: 跨文档消息传输Cross Document Messaging. 编写代码前注意判断浏览器是否支持Html5 实例: b页面向a页面发送消息. <!DOCTYPE> <htm ...

  8. Delphi cxGrid –--> RecordIndex out of Range

    delphi 导出数据时常常出现这样一个错误 < RecordIndex out of Range > 处理办法: 设定 cxGridDBTableView 的 GridModeBuffe ...

  9. Java for LintCode 验证二叉查找树

    给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值.    节点的右子树中的值要严格大于该节点的值.    左右子树也必须是二叉查找树. ...

  10. UrlEncoder url编码

    public static string PercentEncode(string s)        {            var bytes = Encoding.UTF8.GetBytes( ...