在一个异步方法中,可以调用一个或多个异步方法。如何编写代码,取决于一个异步方法的结果是否依靠于另一个异步方法。
01 按顺序调用异步方法
private async static void MultipleAsyncMethods()
{
string sl = await GreetingAsync("Stephanie");
string s2 = await GreetingAsync("Matthias");
Console.WriteLine($"Finished both methods.{Environment.NewLine) " +
$"Result 1: {s1}{Environment.NewLine} Result 2:{s2}");
}
02 使用组合器
示例代码调用 Task.WhenAll 组合器方法,它可以等待,直到两个任务都完成:
private async static void MultipleAsyncMethodsWithCombinators1()
{
Task<string> tl = GreetingAsync("Stephanie");
Task<string> t2 = GreetingAsync("Matthias");
await Task.WhenAll(t1, t2);
Console.WriteLine($"Finished both methods.{Environment.NewLine) " +
$"Result 1:{t1.Result}{Environment.NewLine} Result 2: {t2.Result}");
}
Task 类型的 WhenAll 方法定义了几个重载版本。如果所有的任务返回相同的类型,那么该类型的数组可用于 await 返回的结果。GreetingAsync 方法返回一个 Task<string>,等待返回的结果是一个字符串(string)形式。因此,Task.WhenAll 可用于返回一个字符串数组:
private async static void MultipleAsyncMethodsWithCombinators2()
{
Task<string> t1 = GreetingAsync("Stephanie");
Task<string> t2 = GreetingAsync("Matthias");
string[] result = await Task.WhenAll(t1, t2);
Console.WriteLine($"Finished both methods.{Environment.NewLine} " +
$"Result 1:{result[0]}{Enviornment.NewLine} Result 2:{result[1]}");
}
只有等待的所有任务都完成时某个任务才能继续,WhenAll 方法就有实际用途。当调用任务在等待完成的任何任务都完成才能执行操作时,可以使用 WhenAny 方法。它可以使用任务的结果继续。