2

我正在尝试将应用程序转换为使用任务而不是 Microsoft 的多线程框架,但我在错误处理方面遇到了问题。从微软的文档(http://msdn.microsoft.com/en-us/library/vstudio/0yd65esw.aspx)中,我希望下面的 try-catch 能够捕获异常:

private async void Button1_Click()
{
    try
    {
        object obj = await TaskFunctionAsync()
    }
    catch(Exception ex)
    {}
}

public Task<object> TaskFunctionAsync()
{
    return Task.Run<object>(() =>
    {
        throw new Exception("foo");
        return new object();
    });
}

但是当 Button1_Click 被触发时,我在 lambda 表达式中得到一个未处理的异常。有没有办法让异常进入try-catch?我认为这种错误处理(所以你不需要从任务工作线程编组)是任务框架的主要好处之一。

我也试过:

public async Task<object> TaskFunctionAsync()
{
    return await Task.Run<object>(() =>
        {
            throw new Exception("foo");
            return new object();
        });
}
4

1 回答 1

2

但是当 Button1_Click 被触发时,我在 lambda 表达式中得到一个未处理的异常

That's not true. It is unhandled by user-code because the framework catches it, but not completely unhandled. Continue running the application to see that the exception will be caught by the catch in Button1_Click.

于 2012-11-27T21:09:56.933 回答