【发布时间】:2018-03-01 08:30:23
【问题描述】:
我这里有一些代码。这是一个真实类的简化版本:
public class Delayer
{
//it has to be unawaitable
public async void Execute(Action action)
{
await Task.Delay(10).ConfigureAwait(false);
action.BeginInvoke(null, null); //action.Invoke();
}
}
我用它:
private static Task TestFoo()
{
throw new Exception();
}
delayer.Execute(async () =>
{
//do something else
await TestFoo().ConfigureAwait(false);
});
我不能通过将Execute 方法传递给try/catch 来处理这个异常,我也不能通过将action.BeginInvoke(null, null) 传递给try/catch 来处理这个异常。如果只有在将异步 lambda 传递给 Execute 方法时将它包围起来,我就可以处理它。
我的问题是:为什么要使用 await 执行异步 lambda?因为如果不使用 await 执行,异常就会被吞掉。
我希望Execute 方法能够吞下操作引发的所有异常。任何想法如何做到这一点?我做错了什么?
加法:
Execute 的行为一定是“开火即忘操作”。
【问题讨论】:
-
只在执行方法中实现try catch并处理那里的所有异常。
标签: c# .net asynchronous exception-handling async-await