【多线程】 Task

一. 常用方法:

  1. ContinueWith : 当前 Task 完成后, 执行传入的 Task

  2. Delay : 创建一个等待的 Task,只有在调用 Wait 方法时才会阻塞 (注意:与 Thread.Sleep 不同)

  3. Run : 创建一个 Task 并执行

  4. Start : 执行 Task

  5. Wait : 在一定时间内阻塞线程, 直到 Task 完成或超过等待时间时取消阻塞

  6. WaitAll : 阻塞线程直到所有的 Task 完成或超过等待时间

  7. WaitAny : 阻塞线程直到有一个 Task 完成或超过等待时间

二. 常用属性:

  1. Factory : 获取用于创建 Task 的工厂, 创建 Task 用

  2. Status : Task 的状态

三. 语法

   private static void Main(string[] args)
{
Console.WriteLine(DateTime.Now+" 开始");
Task t1 = Task.Factory.StartNew(DoTask).ContinueWith(ContinueTask);// 创建 Task 执行 DoTask, DoTask 完成后 执行ContinueTask
Task t2 = Task.Factory.StartNew(DoTask);
Task.WaitAny(new[] { t1, t2 }, );
Console.WriteLine(DateTime.Now + " WaitAny 超时 1 秒");
Task.WaitAll(new[] { t1, t2 }, * );
Console.WriteLine(DateTime.Now + " WaitAll 超时 10 秒");
t1.Wait( * );// 注意 : 这里的 t 指的是 ContinueWith,不是 StartNew, 即表达式最后的 Task
Console.WriteLine(DateTime.Now + " 等待 t1 超时 50 秒");
Console.ReadLine();
} private static void DoTask()
{
Task.Delay( * ).Wait();// 阻塞 3 秒, 只有 Wait 后才有效
Console.WriteLine(DateTime.Now + " DoTask 完成,工作了 3 秒");
} private static void ContinueTask(Task task)
{
Task.Delay( * ).Wait();// 阻塞 4 秒, 只有 Wait 后才有效
Console.WriteLine(DateTime.Now + " ContinueTask 完成,在 DoTask 之后 工作了 4 秒");
}

   

【多线程】 Task的更多相关文章

  1. .Net进阶系列(13)-异步多线程(Task和Parallel)(被替换)

    一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托. 2. 利用Tas ...

  2. 多线程Task

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. C# 多线程task

    1.异步和多线程的区别?没什么太大区别.异步是目的,使用多线程实现.想想AJAX异步加载,不就是不想让浏览器界面卡住嘛,所以在程序中对于某些单独的操作,比如写日志,我们不想等它完成后再执行其它操作(因 ...

  4. 多线程--Task,等待用户输入AutoResetEvent

    上一篇文章:.NET:如何让线程支持超时?已经说明目前微软主推的多线程方案是task: 注意:Task最好引用.NET4.5. 4.0也行,但不成熟.Thread引用2.0就够了. 1.通过构造函数创 ...

  5. [.net 多线程]Task

    C# 异步编程Task整理(一) c# .Net并行和多线程编程之Task学习记录! .NET 实现并行的几种方式(一) Dispatcher介绍 [C#学习笔记]使用C#中的Dispatcher 用 ...

  6. 多线程-Task、await/async

    Task创建无返回值 Task是.netframwork4.0重新分装的多线程类.原因以前的多线程(thread threadpool)不好用.(.net framwork也是的发展的,现在的EF,刚 ...

  7. 线程——自定义多线程task

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 异步多线程 Task理解

    一.简介 Task是.NET Framework4.0 TPL(任务并行库)提供的新的操作线程池线程的封装类.它提供等待.终止(取消).返回值.完成通知.失败通知.控制执行的先后次序等优化线程操作功能 ...

  9. C#多线程---Task实现异步

    一.场景 使用Task来进行累加操作. 二.例子-Task使用 1 using System; 2 using System.Collections.Generic; 3 using System.L ...

  10. .Net 多线程 异步编程 Await、Async和Task

    await和async简介   await和async是在C#5中引入,并且在.NetFramewor4.5以及.NetCore中进行了支持.主要是解决性能瓶颈,并且增强系统的响应能力. msdn关于 ...

随机推荐

  1. Android(java)学习笔记37:String类型的面试题

    1. String类型面试题: package cn.itcast_02; /* * String s = new String(“hello”)和String s = “hello”;的区别? * ...

  2. 【LOJ6052】「雅礼集训 2017 Day11」DIV(杜教筛)

    点此看题面 大致题意: 求\(1\sim n\)内所有满足\(a>0\)的约数\(a+bi\)的\(a\)之和. 解题思路 首先,我们设\(x=(a+bi)(c+di)(1\le x\le n) ...

  3. bzoj 1597 斜率DP

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5115  Solved: 1897[Submit] ...

  4. UOJ 35 后缀数组

    后缀数组裸题,求排名第1~n的后缀,想相邻后缀的最长公共前缀. 集训队模板就是硬lO(∩_∩)O哈哈~ #include <cstdio> #include <cmath> # ...

  5. AngularJS 一 简介以及安装环境

    AngularJS官网:https://angularjs.org AngularJS是开发动态Web应用程序的客户端JavaScript MVC框架.AngularJS最初是作为Google的一个项 ...

  6. 2017-09-26 发布 SpringBoot多模块项目实践(Multi-Module)

    https://segmentfault.com/a/1190000011367492?utm_source=tag-newest 2017-09-26 发布 SpringBoot多模块项目实践(Mu ...

  7. java程序执行系统命令

    String cmd="orakill orcl 1233";//解锁数据库表 Process proc = Runtime.getRuntime().exec(cmd);

  8. angularjs Directive自定义指令详解

    作用:需要用Directive有下面的情景: 1.使你的Html更具语义化,不需要深入研究代码和逻辑即可知道页面的大致逻辑. 2. 抽象一个自定义组件,在其他地方进行重用. 3.使用公共代码,减少重复 ...

  9. YII2.0 表单验证手机号是否合法且唯一

    [['phone'], 'unique'], ['phone','match','pattern'=>'/^1[345678]{1}\d{9}$/','message'=>'{attrib ...

  10. Nodejs 使用 SerialPort 调用串口

    工作经常使用串口读写数据,electron 想要替代原来的客户端,串口成了必须要突破的障碍. get -->  https://github.com/EmergingTechnologyAdvi ...