我正在尝试将应用程序转换为使用任务而不是 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();
});
}