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 }