【发布时间】:2020-12-30 13:48:41
【问题描述】:
我和我的同事就在 Task.Run 块中处理异常发生了争执。
例如,我有这样的代码:
private static async Task MainAsync()
{
try
{
await Task.Run(() => throw new Exception());
}
catch (Exception)
{
Console.WriteLine("oops");
}
}
如果我运行此代码(在调试模式下),我将收到来自 vs2019 的有关未处理异常的消息。但是如果我按下继续按钮,应用程序将正常运行并处理异常。
从Task.Run捕获异常的正确方法吗?
【问题讨论】:
-
这能回答你的问题吗? How to handle Task.Run Exception
-
没关系。或者,将它们捕获在
Task.Run本身内(这样它们就不会冒泡)。取决于你真正想做什么。 -
通常情况下,这取决于。在您的示例中,异常被吞没。 MainAsync 的调用者无法知道执行是否成功。在某些情况下,需要此信息,例如开始下一步。
-
@Arli Chokoev 你看到有提到 async/await 吗?这不是类似的情况!
-
I've argued with my colleague about handling exceptions in Task.Run blocks.你的同事建议什么方法?感觉就像你展示了论点的一方面,但没有展示另一面......
标签: c# exception task-parallel-library