C#中的Task.WhenAll和Task.WhenAny方法怎么用
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本篇内容介绍了"C#中的Task.WhenAll和Task.WhenAny方法怎么用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希
千家信息网最后更新 2025年11月11日C#中的Task.WhenAll和Task.WhenAny方法怎么用
本篇内容介绍了"C#中的Task.WhenAll和Task.WhenAny方法怎么用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、简介
Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。
Task.WhenAll():所有提供的任务已完成时,创建将完成的任务。
Task.WhenAny():任何提供的任务已完成时,创建将完成的任务。
二、代码案例
Task.WhenAll
代码:
class Program { public class DownLoadTest { Stopwatch watch = new Stopwatch(); public DownLoadTest() { watch.Start(); } public string DownLoadString(string url) { Console.WriteLine(string.Format("下載{0}開始運行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds)); WebClient wc = new WebClient(); string str = wc.DownloadString(url); Console.WriteLine(string.Format("下載{0}運行結束 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds)); return str; } public async Task DoRunStringAsync(string url) { Console.WriteLine(string.Format("異步程序獲取{0}開始運行:{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds)); var task = await DownLoadStringAsync(url); Console.WriteLine(string.Format("異步程序獲取{0運行結束:{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds)); return task; } public async Task DownLoadStringAsync(string url) { string str = await Task.Run(() => DownLoadString(url)); return str; } } static void Main(string[] args) { string[] urls = { "https://www.baidu.com/", "https://www.taobao.com/", "https://www.cnblogs.com/" }; var task = DoRunsAsync(urls); //task.Wait(3000); Console.WriteLine(string.Format("主線程運行結束.")); Console.ReadKey(); } private static async Task DoRunsAsync(IEnumerable urls) { DownLoadTest dwtest = new DownLoadTest(); List tasks = new List(); foreach (var url in urls) { var task = dwtest.DoRunStringAsync(url); Console.WriteLine("task.Id =" + task.Id + " url=" + url); tasks.Add(task); } await Task.WhenAll(tasks); foreach (var task in tasks) { Console.WriteLine("task.Id =" + task.Id + " task.Status=" + task.Status); } return ""; } } 运行结果:
可以看到await Task.WhenAll(tasks);异步等待了所有的任务完成。
Task.WhenAny
代码:
class Program { public class DownLoadTest { Stopwatch watch = new Stopwatch(); public DownLoadTest() { watch.Start(); } public string DownLoadString(string url) { Console.WriteLine(string.Format("下載{0}開始運行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds)); WebClient wc = new WebClient(); string str = wc.DownloadString(url); Console.WriteLine(string.Format("下載{0}運行結束 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds)); return str; } public async Task DoRunStringAsync(string url) { Console.WriteLine(string.Format("異步程序獲取{0}開始運行:{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds)); var task = await DownLoadStringAsync(url); Console.WriteLine(string.Format("異步程序獲取{0運行結束:{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds)); return task; } public async Task DownLoadStringAsync(string url) { string str = await Task.Run(() => DownLoadString(url)); return str; } } static void Main(string[] args) { string[] urls = { "https://www.baidu.com/", "https://www.taobao.com/", "https://www.cnblogs.com/" }; var task = DoRunsAsync(urls); task.Wait(1000); Console.WriteLine(string.Format("主線程運行結束.")); Console.ReadKey(); } private static async Task DoRunsAsync(IEnumerable urls) { DownLoadTest dwtest = new DownLoadTest(); List tasks = new List(); foreach (var url in urls) { var task = dwtest.DoRunStringAsync(url); Console.WriteLine("task.Id =" + task.Id + " url=" + url); tasks.Add(task); } await Task.WhenAny(tasks); foreach (var task in tasks) { Console.WriteLine("task.Id =" + task.Id + " task.Status=" + task.Status); } return ""; } } 运行结果:
Task.WhenAny(tasks)至少等待了一个任务的完成。这里https://www.baidu.com/先下载完,就直接终止等待 。
"C#中的Task.WhenAll和Task.WhenAny方法怎么用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
任务
程序
代码
方法
C#
内容
更多
案例
知识
结果
运行
实用
学有所成
接下来
两个
困境
实际
情况
文章
简介
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
mc保存服务器地图后咋开
数据库的desc什么意思
深圳网站软件开发
网络安全隐患排查整治情况
软件开发研发部结构
农业银业软件开发武汉
数据库是建立在gis平台之上
b450服务器主板
jsp根据数据库的表来创表
网络安全设备设施
淮安中外专利数据库
j软件开发接单
无退休人员数据库
jdbc 插入数据库
数据库 auth
光伏电站网络安全检查
我的世界ios创建服务器
非软件公司招软件开发正常吗
数据库创建架构失败
软件开发中心主要是做什么的
网络安全为什么是国家安全
艾欧尼亚服务器能有多少人
服务器更新补丁
直播服务器不能上网怎么回事
便携服务器切换快捷键
无线通信及网络技术发展前景
肥东网络安全学费
window服务器怎么改密码
1.7.10的服务器
数据库培训都包括什么