当第一个任务完成后,其中一个子任务失败时,似乎找不到关于Task.WhenAny
行为的明确答案:
static async Task TestWhenAny()
{
try
{
var t1 = Task1();
var t2 = Task2();
var completedTask = await Task.WhenAny(t1, t2);
Console.WriteLine(completedTask == t1);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
static async Task<string> Task1()
{
await Task.Delay(100);
return Guid.NewGuid().ToString();
}
static async Task<string> Task2()
{
await Task.Delay(1000);
throw new InvalidOperationException();
}
WhenAny
完成时,t1
就完成了。之后,t2
引发异常。
自t1
完成以来,我不在乎t2
的结果/异常。
问题:
t2.Exception
是否会被忽略?我发现了this个帖子,但它使我更加困惑:
在WhenAll和WhenAny情况下,我们都有 可能是创建者“未观察到”的例外 WhenAll或WhenAny任务。也就是说,在这两种情况下 可能是引发,自动捕获,缓存和 再也不会抛出它,而在等效的同步代码中 降低了流程。