C# 如何在任务中处理lambda表达式中的异常?
我试图将应用程序转换为使用任务而不是Microsoft的多线程框架,但在错误处理方面遇到了问题。根据Microsoft的文档(),我希望下面的try catch能够捕获异常:C# 如何在任务中处理lambda表达式中的异常?,c#,exception-handling,task,lambda,c#-5.0,C#,Exception Handling,Task,Lambda,C# 5.0,我试图将应用程序转换为使用任务而不是Microsoft的多线程框架,但在错误处理方面遇到了问题。根据Microsoft的文档(),我希望下面的try catch能够捕获异常: private async void Button1_Click() { try { object obj = await TaskFunctionAsync() } catch(Exception ex) {} } public Task<object>
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();
});
}
private async void按钮1\u Click()
{
尝试
{
object obj=await taskfunctionsync()
}
捕获(例外情况除外)
{}
}
公共任务TaskFunctionSync()
{
返回任务。运行(()=>
{
抛出新异常(“foo”);
返回新对象();
});
}
但是当Button1\u Click被激发时,我在lambda表达式中得到一个未处理的异常。是否有某种方法可以将异常导出到try-catch中?我认为这种错误处理(因此不需要从任务工作线程封送)是任务框架的主要优点之一
我也试过:
public async Task<object> TaskFunctionAsync()
{
return await Task.Run<object>(() =>
{
throw new Exception("foo");
return new object();
});
}
public异步任务TaskFunctionAsync()
{
返回等待任务。运行(()=>
{
抛出新异常(“foo”);
返回新对象();
});
}
但是当Button1\u Click被触发时,我在
lambda表达式
那不是真的。它未被用户代码处理,因为框架捕获了它,但不是完全未处理。继续运行应用程序,以查看Button1\u Click中的catch将捕获异常。是否有任何方法使其不在lambda表达式中抛出(但仍在Button1\u Click中),或者有某种方法更“正确”地处理它?这是正确的方法。可能您的调试器设置为在所有异常上都中断(这通常是一件好事)。按Ctrl-alt-E。