【问题标题】:Why is awaiting on this faulted task not throwing the exception? [duplicate]为什么等待这个错误任务没有抛出异常? [复制]
【发布时间】:2020-06-11 14:01:39
【问题描述】:

以为我已经了解了async 方法中的异常,以及当任务引发异常时的WhenAll/WhenAny 行为,但是:

internal async Task RunAsync()
{
    //...

    //one of persistenceTask, monitorsTask is going to throw an exeption
    var completedTask = Task.WhenAny(persistenceTask, monitorsTask);

    await completedTask; //I expect this to throw but it doesn't
}

.

//in a calling method later
var t = await RunAsync();

completedTask 出现状态错误时,我可以在调试器中看到内部异常,但t 最终成功完成。我想要RunAsync抛出的异常 - 我知道WhenAny如果任务出错不会抛出异常,但我想如果我await on一个错误的任务 (completedTask) 这抛出。

我做错了什么?

【问题讨论】:

标签: c# .net async-await task-parallel-library


【解决方案1】:

WhenAny 返回一个永不失败的任务。该任务的结果是已完成的任务。

var completedTask = await Task.WhenAny(persistenceTask, monitorsTask);

【讨论】:

    猜你喜欢
    • 2021-07-08
    • 2018-07-07
    • 2014-08-05
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2014-07-09
    相关资源
    最近更新 更多