相关疑难解决方法(0)

异步方法中的奇怪调试器行为

当我在代码中跨越断点时,我遇到了调试器的奇怪行为:

public async Task DoSomeWork()
{
     await Task.Run(() => { Thread.Sleep(1000); });

     var test = false;
     if (test)
     {
          throw new Exception("Im in IF body!");
     }
}
Run Code Online (Sandbox Code Playgroud)

调试器进入if正文.值得注意的是,异常并没有被抛出,只是看起来就是这样.因此,如果您正确放置断点,则无法重现throw.你必须将它放在上面并向下走到if身体才能抓住它.同样适用于任何类型的异常实例(以及显式null),甚至可以return代替throw.

除此之外它即使我删除行也可以工作await.

我试图从不同的PC运行此代码片段,因此它不是PC的麻烦.另外我认为它是VS代码中的错误,并试图在JetBrains的Rider中运行它 - 结果相同.

我确定这是异步的事情,但它是如何明确地起作用的?

c# debugging asynchronous return throw

3
推荐指数
1
解决办法
1385
查看次数

标签 统计

asynchronous ×1

c# ×1

debugging ×1

return ×1

throw ×1