.net中Task.WaitAll和WaitAny同步的等待Task完成
前面讲了《.net中async/await异步编程》,如果方法中使用了多个异步方法,该如何同步的等待Task完成?
Task.WaitAll 等待提供的所有 System.Threading.Tasks.Task 对象完成执行过程。
DownLoadTest dwtest = new DownLoadTest();
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
var task1 = dwtest.DoRunTaskAsync("https://stackoverflow.com/", token);
var task2 = dwtest.DoRunTaskAsync("https://github.com/", token);
var task3 = dwtest.DoRunTaskAsync("https://www.google.com/", token);
Task[] tasks = new Task[] { task1, task2 , task3 };
Debug.WriteLine("task.Result等待结果打印");
Task.WaitAll(tasks,10000);
cts.Cancel();//超过10s时间取消运行
Console.WriteLine(task1.Status);
Console.WriteLine(task2.Status);
Console.WriteLine(task3.Status);
Debug.WriteLine(string.Format("主线程运行结束"));
Console.ReadKey();
PS:DownLoadTest中的代码查看前面的文章。
执行结果为:
下载https://stackoverflow.com/开始运行 : 1ms
下载https://github.com/开始运行 : 66ms
下载https://www.google.com/开始运行 : 68ms
task.Result等待结果打印
下载https://github.com/运行结束 :2,484ms
下载https://stackoverflow.com/运行结束 :2,571ms
取消https://www.google.com/的运行 :10,074ms
主线程运行结束
控制器打印出来的为
可以看出Task.WaitAll实现了多个异步方法的执行,它有多个重载方法,可以查看.NET帮助文档
Task.WaitAny可以实现等待至少一个任务的完成。修改代码如下:
DownLoadTest dwtest = new DownLoadTest();
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
var task1 = dwtest.DoRunTaskAsync("https://stackoverflow.com/", token);
var task2 = dwtest.DoRunTaskAsync("https://github.com/", token);
var task3 = dwtest.DoRunTaskAsync("https://www.google.com/", token);
Task[] tasks = new Task[] { task1, task2 , task3 };
Debug.WriteLine("task.Result等待结果打印");
Task.WaitAny(tasks,10000);
cts.Cancel();//超过10s时间取消运行
Debug.WriteLine(task1.Status);
Debug.WriteLine(task2.Status);
Debug.WriteLine(task3.Status);
Debug.WriteLine(string.Format("主线程运行结束"));
Console.ReadKey();
Output输出窗口结果为:
下载https://stackoverflow.com/开始运行 : 1ms
下载https://github.com/开始运行 : 52ms
下载https://www.google.com/开始运行 : 53ms
task.Result等待结果打印
下载https://github.com/运行结束 :1,994ms
WaitingForActivation
RanToCompletion
WaitingForActivation
主线程运行结束
取消https://stackoverflow.com/的运行 :1,997ms
取消https://www.google.com/的运行 :1,997ms
可以看到https://github.com/先下载完,就会执行,取消了其它两个的下载。
它有多个重载方法,可以查看.NET帮助文档
转载于:https://www.cnblogs.com/hueychan/p/10575911.html
.net中Task.WaitAll和WaitAny同步的等待Task完成相关推荐
- 在flask中同步调用celery.task函数报错分析
问题介绍 为方便理解,简单说明一下项目,项目中使用的依赖模块有:flask,flask-sqlalchemy,flask-celery等等. 在同步方式调用task函数的时候出现了DetachedIn ...
- C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- NET问答: 多个 await 和 Task.WaitAll 是等价的吗?
咨询区 vidalsasoon: 我有下面两个方法: MethodA: 使用多个 await 方式 public async Task<IHttpActionResult> MethodA ...
- C# Task.WaitAll 方法
定义 命名空间: System.Threading.Tasks 程序集: mscorlib.dll, netstandard.dll 等待所有提供的 Task 对象完成执行过程. 重载 重载 Wait ...
- 工作中InnoDB引擎数据库主从复制同步心得
近期将公司的MySQL架构升级了,由原先的一主多从换成了DRBD+Heartbeat双主多从,正好手上有一个电子商务网站新项目也要上线了,用的是DRBD+Heartbeat双主一从,由于此过程还是有别 ...
- 阿里mysql数据库同步_如何对MySQL数据库中的数据进行实时同步-阿里云开发者社区...
数据传输(Data Transmission) 支持以数据库为核心的结构化存储产品之间的数据传输. 它是一种集数据迁移.数据订阅及数据实时同步于一体的数据传输服务.数据传输致力于在公有云.混合云场景下 ...
- java同步关键字_Java中synchronized关键字修饰方法同步的用法详解
Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有 ...
- [转]关于java中的 sychronized 同步方法 与 同步块的理解
首先,需要说明一点,也是最重要的一点,无论是同步方法 还是 同步块 都是只针对同一个对象的多线程而言的,只有同一个对象产生的多线程,才会考虑到 同步方法 或者是 同步块,如果定义多个实例的同步,可以考 ...
- ISIS—ISIS中LSP(数据库)同步如何保证LSDB可靠性—04
目录 一.LSP基础知识:(链路状态更新,相当于OSPF的LSA) 二.ISIS中LSP(数据库)同步如何保证LSDB可靠性? ISIS LSP(数据库)同步机制 ①P2P网络: ②MA网络: ③特例 ...
最新文章
- Javascript函数的简单学习
- Win2008 r2 iis7/iis7.5系统下HTTP重定向(301重定向)图文方法
- Linux原始套接字学习总结
- Appium——主从控制执行
- centos中bash占用cpu,Linux中显示内存和CPU使用率最高的进程和SHELL脚本例子
- 软件工程概论个人总结
- jtoken判断是否包含键_Redis源码解析十三--有序集合类型键实现(t_zset)
- git添加多远端服务器并且实现push代码
- iphoneX的适配问题
- python成绩管理系统设计 gui csdn_用golang简单编写学生信息管理系统
- steam当前计算机无法,steam无法打开【操作思路】
- 为什么都不想去中科创达_那些过年不想回家的人,都去了哪?
- JS混入(mix-in)小案例
- MsDos下的Debug调试器与8080汇编小实验
- 高中的班花貌美如花,我与一众兄弟将其“共享”了!
- [转] ThreeJS中,那些会让阴影失效的操作
- python玩王者荣耀皮肤_python 王者荣耀皮肤高清图片下载 附源码
- SQL Developer的下载、安装和连接Oracle数据库
- VCS IDEA没有Enable Version Control Intergration
- cascade down_cascade是什么意思_cascade的翻译_音标_读音_用法_例句_爱词霸在线词典...