C#异步方法中Task.WhenAll的使用
一、说明
Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。
Task.WhenAll():所有task完成时,task才完成,用于等待多个任务执行结束。
Task.WhenAny():任何一个task完成时,task完成。
二、示例:
using System; using System.IO; using System.Linq; using System.Threading.Tasks; namespace 取消 { class Program { static void Main(string[] args) { FileCharsCount(); } /// <summary> /// 统计所有文件的字符数 /// </summary> static async void FileCharsCount() { string[] files = Directory.GetFiles(@"D:\test\temp"); Task<int>[] countTasks = new Task<int>[files.Length]; for (int i = 0; i < countTasks.Length; i++) { string filename = files[i]; Task<int> t = ReadCharsCount(filename); countTasks[i] = t; } int[] counts = await Task.WhenAll(countTasks); //取到所有结果返回 int c = counts.Sum(); //统计所有文件的字符数 Console.WriteLine(c); Console.ReadKey(); } static async Task<int> ReadCharsCount(string filename) { string s = await File.ReadAllTextAsync(filename); return s.Length; } } }