当方法返回包含在 try/catch
block 中的 Task
时会发生什么?如果未等待的 Task
抛出异常,是否捕获/处理了异常?
例如,如果 DoSomethingAsync()
抛出异常,我可以在 TryCatchMethod()
的 try/catch
block 中处理它吗?
Task TryCatchMethod()
{
try
{
return DoSomethingAsync();
}
catch(Exception e)
{
//Handle Exception
}
}
async Task DoSomethingAsync()
{
await Task.Delay(10000);
throw new System.Exception();
}
最佳答案
如果 DoSomethingAsync
抛出异常,则捕获该异常。如果它返回一个错误的任务,而不是抛出异常,那么在您尝试获取任务结果(通过等待)之前,没有异常可以捕获。由于您没有在 try
block 中执行此操作,因此它不会运行您的 catch
block 。
请注意,如果该方法被标记为 async
,则该方法主体中抛出的任何异常都会被捕获并导致该方法返回错误任务,而不是该方法抛出异常。对于抛出异常的方法,该方法需要返回一个 Task
而不被标记为 async
。
关于c# - Try/Catch block 中的非等待任务会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47316145/