C#中的Task.WhenAll和Task.WhenAny方法介绍
在C#中,我们经常使用Task来进行异步编程,Task.WhenAll和Task.WhenAny则是Task API中的两个非常有用的方法。
Task.WhenAll
Task.WhenAll方法接收一个Task列表,并在所有Task都执行完成后返回一个新的Task。这个新的Task为完成状态,并且其Result为一个包含所有Task结果的数组。
下面是一个例子,我们用Task.WhenAll方法并行执行两个Task,获取它们的返回值:
Task<int> task1 = Task.Run(() => { return 1; });
Task<int> task2 = Task.Run(() => { return 2; });
Task<int[]> whenAllTasks = Task.WhenAll(task1, task2);
int[] results = await whenAllTasks;
在这个例子中,task1和task2分别返回1和2,我们使用Task.WhenAll并行执行这两个Task并获取它们的返回值。在任务完成后,我们获取返回的结果数组,其中包含了task1和task2的返回值。
Task.WhenAny
Task.WhenAny方法与Task.WhenAll方法很像,也接收一个Task列表作为参数,但它并不是在所有Task完成后返回。相反,它会在任何一个Task完成后即返回一个新的Task,这个新的Task为完成状态,并且其Result为第一个完成的Task的返回值。其余的Task则继续执行。
下面是一个例子,我们用Task.WhenAny方法并行执行多个Task,并获取第一个完成的Task的返回值:
Task<int> task1 = Task.Delay(5000).ContinueWith(_ => { return 1; });
Task<int> task2 = Task.Delay(2000).ContinueWith(_ => { return 2; });
Task<int> task3 = Task.Delay(3000).ContinueWith(_ => { return 3; });
Task<int> whenAnyTasks = await Task.WhenAny(task1, task2, task3);
int result = whenAnyTasks.Result;
在这个例子中,task1延迟5秒后返回1,task2延迟2秒后返回2,task3延迟3秒后返回3。我们使用Task.WhenAny并行执行这三个Task,并获取第一个完成的Task的返回值。在执行完成后,我们获取第一个完成的Task的返回值。
总结
Task.WhenAll和Task.WhenAny都是非常有用的Task API方法。Task.WhenAll可以并行执行多个Task,等待它们全部完成后返回一个结果数组;Task.WhenAny则可以并行执行多个Task,获取第一个完成的Task的返回值。这些方法可以大大提高异步编程的效率和可读性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中的Task.WhenAll和Task.WhenAny方法介绍 - Python技术站