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 @ 2023-01-26 22:48  ziff123  阅读(2414)  评论(0编辑  收藏  举报