一、说明
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;
}
}
}