Task.WhenAny在第一个任务完成后子任务之一失败的任何行为

时间:2019-02-11 07:47:49

标签: c# .net async-await

当第一个任务完成后,其中一个子任务失败时,似乎找不到关于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任务。也就是说,在这两种情况下   可能是引发,自动捕获,缓存和   再也不会抛出它,而在等效的同步代码中   降低了流程。

0 个答案:

没有答案