Task task = AsyncMethod();
// do other stuff
await task;
AsyncMethod()
可以抛出异常。我是否将try-catch放在方法调用,await
或两者之间?
答案 0 :(得分:4)
为了避免关于异常处理应该发生在哪里的整个争论,我只是稍微改变你的问题:在哪里可以捕获从AsyncMethod
方法抛出的异常。
答案是:你await
的位置。
假设您的AsyncMethod
方法看起来像这样:
private async Task AsyncMethod()
{
// some code...
throw new VerySpecificException();
}
...然后你可以通过这种方式捕捉异常:
Task task = AsyncMethod();
// do other stuff
try
{
await task;
}
catch(VerySpecificException e) // nice, I can use the correct exception type here.
{
// do something with exception here.
}
只需对其进行测试,您就会看到await
关键字如何完成展开所有工作以及从返回的Task
中抛出异常的方式,使try-catch
编码感觉非常自然1}}阻止。
相关文档:try-catch。
请注意异步方法中的异常部分说明:
要捕获异常,请等待try块中的任务,并在关联的catch块中捕获异常。