gpt4 book ai didi

c# - 未捕获 TaskEx.Run 的任务抛出的异常

转载 作者:行者123 更新时间:2023-11-30 21:06:57 30 4
gpt4 key购买 nike

我在使用异步 CTP 时遇到问题,试图弄清楚处理异常的正确方法是什么。下面的代码使我的程序崩溃,据我所知,await 应该在调用它的上下文中捕获并重新抛出异常,所以 Not caught! block 应该捕获异常。

try {
await TaskEx.Run(() => {
throw new Exception();
});
} catch {
// Not caught!
}

感谢任何帮助或建议。

最佳答案

我使用测试版(而不是 CTP,因此 TaskEx 变成了 Task)效果很好:

using System;
using System.Threading.Tasks;

class Test
{
static void Main()
{
Task t = Foo();
t.Wait();
}

static async Task Foo()
{
try
{
await Task.Run(() => { throw new Exception(); });
}
catch (Exception e)
{
Console.WriteLine("Bang! " + e);
}
}

输出:

Bang! System.Exception: Exception of type 'System.Exception' was thrown.
at Test.<Foo>b__0()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter
.HandleNonSuccessAndDebuggerNotification(Task task)
at Test.<Foo>d__2.MoveNext()

同样的代码在你的机器上做了什么?

关于c# - 未捕获 TaskEx.Run 的任务抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804640/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com