【多线程】 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. 时空隧道FQ

    给你推荐一款海外网站加速工具,为科技工作者.海外归国人员.企业团队.外贸工作者提供海外上网服务,永久免费. 国外网址:https://chrome.google.com/webstore/detail ...

  2. o'Reill的SVG精髓(第二版)学习笔记——第九章

    第九章:文本 9.1 字符:在XML文档中,字符是指带有一个数字值的一个或多个字节,数字只与Unicode标准对应. 符号:符号(glyph)是指字符的视觉呈现.每个字符都可以用很多不同的符号来呈现. ...

  3. SQL Server笔记-语法

    1.USE <DatabaseName> //选择数据库 例:USE [master] //master是系统默认数据库 2.字段或表名与保留字或关键字重名时需要加. 3.COMPATIB ...

  4. 数据库——MySQL——权限管理

    关于MySQL的权限管理,可以理解为是MySQL运行你做的事情.比如MySQL允许你执行select操作那么你就不能用update操作.如果你让你在某台机器上连接MySQL,那么你就不能在这个机器以外 ...

  5. 优雅的QSignleton (二) MonoSingleton单例实现

    MonoSingleton.cs namespace QFramework.Example { using System.Collections; using UnityEngine; class C ...

  6. 你不知道的javaScript笔记(2)

    this和对象原型 this是一个很特别的关键字,被自动定义在所有函数的作用域中 // foo.count 是0,字面理解是错误的 function foo(num) { console.log(&q ...

  7. poj 2763 Housewife Wind : 树链剖分维护边 O(nlogn)建树 O((logn)²)修改与查询

    /** problem: http://poj.org/problem?id=2763 **/ #include<stdio.h> #include<stdlib.h> #in ...

  8. pycharm中配置pyspark

    1 下载官网spark-2.1.1-bin-hadoop2.7.tgz(版本自己选择),解压将文件放在了指定路径下,这个文件夹里面有python文件,python文件下还有两个压缩包py4j-some ...

  9. deepin15.7下使用apt安装mysql5.7不显示root密码设置的解决方法

    在安装MySQL的过程中,并没有要求设置root账户密码的步骤,导致很多人无法使用root账户登录 这个问题早已有解决方案,笔者在deepin15.7下安装也遇到同样问题,只是做一个简单的记录 解决思 ...

  10. SSM框架搭建步骤

    首先要导入相关的jar包(spring\spring-core\spring-jdbc\spring-aop\spring-context\spring-webmvc\junit\commons-la ...