我正在尝试将应用程序转换为使用Tasks而不是Microsoft的多线程框架,但我遇到了错误处理问题。从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();
});
}
答案 0 :(得分:2)
但是当Button1_Click被触发时,我得到一个未处理的异常 lambda表达式
那不是真的。它由用户代码未处理,因为框架捕获了它,但未完全未处理。继续运行应用程序,看看Button1_Click中的catch会捕获异常。