Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在哪里捕获异步代码中的异常?_C#_Exception_Async Await_Try Catch - Fatal编程技术网

C# 在哪里捕获异步代码中的异常?

C# 在哪里捕获异步代码中的异常?,c#,exception,async-await,try-catch,C#,Exception,Async Await,Try Catch,AsyncMethod()可以引发异常。我是将try-catch放在方法调用的周围,还是将wait,或者两者都放在一起?为了避免整个关于异常处理应该发生在哪里的争论,我将您的问题稍微改为:在哪里可以捕获从asynchmethod方法引发的异常 答案是:你在哪里等待它 假设您的AsyncMethod方法如下所示: Task task = AsyncMethod(); // do other stuff await task; 。。。然后可以通过以下方式捕获异常: private async

AsyncMethod()
可以引发异常。我是将try-catch放在方法调用的周围,还是将
wait
,或者两者都放在一起?

为了避免整个关于异常处理应该发生在哪里的争论,我将您的问题稍微改为:在哪里可以捕获从
asynchmethod
方法引发的异常

答案是:你在哪里等待它

假设您的
AsyncMethod
方法如下所示:

Task task = AsyncMethod();

// do other stuff

await task;
。。。然后可以通过以下方式捕获异常:

private async Task AsyncMethod()
{
    // some code...
    throw new VerySpecificException();
}
只要测试一下,您就会看到
await
关键字如何从返回的
Task
中展开并抛出异常,以一种编写
try catch
块感觉非常自然的方式

相关文件:

请注意异步方法中的异常部分所说的内容:

要捕获异常,请在try块中等待任务,然后在关联的catch块中捕获异常


为了避免整个关于异常处理应该发生在哪里的争论,我将您的问题稍微改为:在哪里可以捕获从
asynchmethod
方法抛出的异常

答案是:你在哪里等待它

假设您的
AsyncMethod
方法如下所示:

Task task = AsyncMethod();

// do other stuff

await task;
。。。然后可以通过以下方式捕获异常:

private async Task AsyncMethod()
{
    // some code...
    throw new VerySpecificException();
}
只要测试一下,您就会看到
await
关键字如何从返回的
Task
中展开并抛出异常,以一种编写
try catch
块感觉非常自然的方式

相关文件:

请注意异步方法中的异常部分所说的内容:

要捕获异常,请在try块中等待任务,然后在关联的catch块中捕获异常


@RonBeyer我的问题是关于async/await的。在这些链接页面的任何地方都找不到
async
wait
。很抱歉,我错过了wait部分,这就是我在平板电脑和@RonBeyer上冲浪得到的。我的问题是关于async/wait的。在这些链接页面的任何地方都找不到
async
wait
字样。很抱歉,我错过了wait部分,这就是我在网上冲浪时得到的tablet@Micky:是的,但是在这种情况下,OP显然返回了一个
任务
,这是正常情况。谢谢。不管怎样,你对我问题的重新表述更符合我的要求;)阅读链接文档后,我对它有了更好的理解-实际上是
await
导致了异常,因为任务处于故障状态。现在说得通了,谢谢@sstan@Brett:是的,没错。wait关键字打开并抛出异常,使其行为相当透明,甚至可以抛出正确的原始异常类型,而不是更烦人的AggregateException。@亲爱的downvoter:我随时愿意学习。如果我说错了什么,不要害怕留下评论。我不会咬:)@Micky:是的,但在这种情况下,OP显然返回了一个
任务
,这是正常情况。谢谢。不管怎样,你对我问题的重新表述更符合我的要求;)阅读链接文档后,我对它有了更好的理解-实际上是
await
导致了异常,因为任务处于故障状态。现在说得通了,谢谢@sstan@Brett:是的,没错。wait关键字打开并抛出异常,使其行为相当透明,甚至可以抛出正确的原始异常类型,而不是更烦人的AggregateException。@亲爱的downvoter:我随时愿意学习。如果我说错了什么,不要害怕留下评论。我不会咬:)