当我在代码中跨越断点时,我遇到了调试器的奇怪行为:
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中运行它 - 结果相同.
我确定这是异步的事情,但它是如何明确地起作用的?