dev*_*bmw 2 c# exception try-catch async-await
Task task = AsyncMethod();
// do other stuff
await task;
Run Code Online (Sandbox Code Playgroud)
AsyncMethod()可以抛出异常。我是否将 try-catch 放在方法调用、await或两者周围?
为了避免关于异常处理应该在哪里发生的整个争论,我将稍微改变你的问题:在哪里可以捕获从方法抛出的异常AsyncMethod。
答案是:你在哪里await。
假设你的AsyncMethod方法看起来像这样:
private async Task AsyncMethod()
{
// some code...
throw new VerySpecificException();
}
Run Code Online (Sandbox Code Playgroud)
...然后你可以这样捕获异常:
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.
}
Run Code Online (Sandbox Code Playgroud)
只需测试它,您就会看到await关键字如何完成所有展开工作并从返回的异常Task中抛出异常,这使得对try-catch块进行编码感觉非常自然。
相关文档:try-catch。
请注意“异步方法中的异常”部分的内容:
要捕获异常,请在 try 块中等待任务,并在关联的 catch 块中捕获异常。
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |