.C# Task.WhenAll
有时候我们需要同时执行一些操作,然后把这些操作的结果进行汇总,以达到用异步处理降低操作耗时的效果,此时我们会考虑使用Task,而Task.WhenAll则排上了用场。
async void TestTaskWhenAll() { var total =10; Task<string>[] tasks = new Task<string>[total]; for (int i = 0; i < total; i++) { tasks[i] = Convert("test "+ i ); } await Task.WhenAll(tasks); foreach (var task in tasks) { Debug.WriteLine("task.Id =" + task.Id + " task.Status=" + task.Status + " result:"+ task.Result); } return; } Random rnd = new Random(); async Task Convert(string str) { await Task.Delay(rnd.Next(1000,6000)); Debug.Print(str+" OK"); return "task " + str; }
结果:
test 5 OK test 7 OK test 9 OK test 4 OK test 2 OK test 8 OK test 1 OK test 6 OK test 10 OK test 0 OK test 3 OK task.Id =4894 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462530097716 task.Id =4896 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462515158794 task.Id =4898 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462508434632 task.Id =4900 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462530342270 task.Id =4902 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462508404465 task.Id =4904 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462503610679 task.Id =4906 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462518147200 task.Id =4908 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462504196737 task.Id =4910 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462510625275 task.Id =4912 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462505016507 task.Id =4914 task.Status=RanToCompletion result:task C:\Users\Administrator\source\repos\MSTextSpeech\MSTextSpeech\bin\x86\Debug\net48\temp-637835462526342482