在C#中,Task.WhenAll和Task.WhenAny是两个非常常用的异步方法,用于处理多个任务的完成情况。
Task.WhenAll方法接受一个Task数组作为参数,返回一个新的Task,该Task会在所有传入的Task都完成后完成。例如,下面的代码会创建两个异步任务,分别模拟两个耗时操作,并通过Task.WhenAll方法等待它们全部完成:
Task task1 = Task.Delay(1000);
Task task2 = Task.Delay(2000);
await Task.WhenAll(task1, task2);
在上面的代码中,Task.WhenAll方法会等待task1和task2都完成后才会返回。
Task.WhenAny方法也接受一个Task数组作为参数,返回一个新的Task,该Task会在任意一个传入的Task完成后完成。例如,下面的代码会创建两个异步任务,分别模拟两个耗时操作,并通过Task.WhenAny方法等待它们中的任意一个完成:
Task task1 = Task.Delay(1000);
Task task2 = Task.Delay(2000);
Task completedTask = await Task.WhenAny(task1, task2);
在上面的代码中,Task.WhenAny方法会等待task1和task2中的任意一个完成后就会返回,返回的Task对象表示已经完成的那个任务。
需要注意的是,Task.WhenAll和Task.WhenAny方法都是异步方法,需要使用await关键字等待它们的执行结果。此外,Task.WhenAll方法返回的Task对象只有在所有传入的Task都完成后才会完成,而Task.WhenAny方法返回的Task对象只有在任意一个传入的Task完成后才会完成。