C#异步方法中Task.WhenAll的使用

一、说明

Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。
Task.WhenAll():所有task完成时,task才完成,用于等待多个任务执行结束。
Task.WhenAny():任何一个task完成时,task完成。

二、示例:

 

复制代码
 1 using System;
 2 using System.IO;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5 
 6 namespace 取消
 7 {
 8     class Program
 9     {
10         static  void Main(string[] args)
11         {
12 
13             FileCharsCount();
14         }
15 
16         /// <summary>
17         /// 统计所有文件的字符数
18         /// </summary>
19         static async void FileCharsCount()
20         {
21             string[] files = Directory.GetFiles(@"D:\test\temp");
22             Task<int>[] countTasks = new Task<int>[files.Length];
23 
24             for (int i = 0; i < countTasks.Length; i++)
25             {
26                 string filename = files[i];
27                 Task<int> t = ReadCharsCount(filename);
28                 countTasks[i] = t;
29             }
30 
31             int[] counts = await Task.WhenAll(countTasks);  //取到所有结果返回
32             int c = counts.Sum();   //统计所有文件的字符数
33 
34             Console.WriteLine(c);
35             Console.ReadKey();
36         }
37 
38         static async Task<int> ReadCharsCount(string filename)
39         {
40             string s = await File.ReadAllTextAsync(filename);
41             return s.Length;
42         }
43     }
44 }
复制代码

 

posted @   ziff123  阅读(2439)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示