这是处理异常的正确方法吗?
Is this correct way to handle an exception?
我和我的同事争论过 Task.Run 块中的异常处理。
例如,我有这个代码:
private static async Task MainAsync()
{
try
{
await Task.Run(() => throw new Exception());
}
catch (Exception)
{
Console.WriteLine("oops");
}
}
如果我 运行 此代码(在调试模式下),我将从 vs2019 获得有关未处理异常的消息。但是如果我按下继续按钮,应用程序将正常工作并且异常将得到处理。
这是从 Task.Run 捕获异常的正确方法吗?
通常,任务中的异常(class Task
的对象)放在任务上,即如果任务中的某些代码在该任务中抛出异常 - 它存储在 Exception
属性 在 Task
class.
await
运算符自动“解包”异常并抛出。所以你的方法是完全正确的,但我认为堆栈跟踪可能会改变 - 所以你需要记住这一点。
我和我的同事争论过 Task.Run 块中的异常处理。
例如,我有这个代码:
private static async Task MainAsync()
{
try
{
await Task.Run(() => throw new Exception());
}
catch (Exception)
{
Console.WriteLine("oops");
}
}
如果我 运行 此代码(在调试模式下),我将从 vs2019 获得有关未处理异常的消息。但是如果我按下继续按钮,应用程序将正常工作并且异常将得到处理。
这是从 Task.Run 捕获异常的正确方法吗?
通常,任务中的异常(class Task
的对象)放在任务上,即如果任务中的某些代码在该任务中抛出异常 - 它存储在 Exception
属性 在 Task
class.
await
运算符自动“解包”异常并抛出。所以你的方法是完全正确的,但我认为堆栈跟踪可能会改变 - 所以你需要记住这一点。