【多线程】 Task
【多线程】 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的更多相关文章
- .Net进阶系列(13)-异步多线程(Task和Parallel)(被替换)
一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托. 2. 利用Tas ...
- 多线程Task
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- C# 多线程task
1.异步和多线程的区别?没什么太大区别.异步是目的,使用多线程实现.想想AJAX异步加载,不就是不想让浏览器界面卡住嘛,所以在程序中对于某些单独的操作,比如写日志,我们不想等它完成后再执行其它操作(因 ...
- 多线程--Task,等待用户输入AutoResetEvent
上一篇文章:.NET:如何让线程支持超时?已经说明目前微软主推的多线程方案是task: 注意:Task最好引用.NET4.5. 4.0也行,但不成熟.Thread引用2.0就够了. 1.通过构造函数创 ...
- [.net 多线程]Task
C# 异步编程Task整理(一) c# .Net并行和多线程编程之Task学习记录! .NET 实现并行的几种方式(一) Dispatcher介绍 [C#学习笔记]使用C#中的Dispatcher 用 ...
- 多线程-Task、await/async
Task创建无返回值 Task是.netframwork4.0重新分装的多线程类.原因以前的多线程(thread threadpool)不好用.(.net framwork也是的发展的,现在的EF,刚 ...
- 线程——自定义多线程task
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 异步多线程 Task理解
一.简介 Task是.NET Framework4.0 TPL(任务并行库)提供的新的操作线程池线程的封装类.它提供等待.终止(取消).返回值.完成通知.失败通知.控制执行的先后次序等优化线程操作功能 ...
- C#多线程---Task实现异步
一.场景 使用Task来进行累加操作. 二.例子-Task使用 1 using System; 2 using System.Collections.Generic; 3 using System.L ...
- .Net 多线程 异步编程 Await、Async和Task
await和async简介 await和async是在C#5中引入,并且在.NetFramewor4.5以及.NetCore中进行了支持.主要是解决性能瓶颈,并且增强系统的响应能力. msdn关于 ...
随机推荐
- CryptoSwift:密码学
Hash (Digest) MD5 | SHA1 | SHA224 | SHA256 | SHA384 | SHA512 | SHA3 Cyclic Redundancy Check (CRC) CR ...
- 20165322 实验二《Java面向对象程序设计》实验报告
实验二<Java面向对象程序设计>实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实 ...
- [学习笔记] numpy次成分分析和PCA降维
存个代码,以后参考. numpy次成分分析和PCA降维 SVD分解做次成分分析 原图: 次成分复原图: 代码: import numpy as np from numpy import linalg ...
- 简单实现CombineFileInputFormat
import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.conf.Configuration; ...
- Win7安装MinGW
MinGW官网:http://www.mingw.org/ 点击下载,稍后就会跳转到下载页面 下载文件后是一个在线安装包,下载过程有点长 Basic Setup里的包都需要安装,点击Installat ...
- JS JavaScript闭包和作用域
JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外一个函数作用域中变量的函数. 从概念上,闭包有两个特点: 1.函数 2.能访问另外一个函数的作用域中的变量 在ES6之前,JavaS ...
- 轻量ORM-SqlRepoEx 重大升级
.Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,支持MySQL.SQL Server数据库方言,使用强类型操作数据的轻量级ORM工具,在减少魔法 ...
- vi常用命令学习
(1)移动光标 h : 左移光标l : 右移光标j : 下移光标k : 上移光标 w : 移动到下一个单词词头b : 移动到上一个单词词头e : 移动到本单词的尾部 0 :移动到当前行的开端$ :移动 ...
- 微信小程序已发布版本vconsole仍出现问题解决办法
解决办法很简单,进入小程序的体验或者开发版,点击关闭调试,再次进入小程序,就不会出现了
- 随便说说Promise
为啥要说 promise ? 因为这是前端必须要掌握的一个知识,吹逼必备 首先说说 Promise 是什么? Promise 是JavaScript的第一个异步标准模型,一个包含传递信息与状态的对象, ...