私は自分のコードにブレークポイントをステップオーバーすると、私は、デバッガの奇妙な行動に遭遇した:奇妙なデバッガの動作
public async Task DoSomeWork()
{
await Task.Run(() => { Thread.Sleep(1000); });
var test = false;
if (test)
{
throw new Exception("Im in IF body!");
}
}
デバッガはif
体内に入ります。例外が本当にスローされていないが、まるでそうであるように見えることは注目に値する。したがって、ブレークポイントをthrow
に置くと、それを再現することはできません。あなたはそれを上に置き、それを捕まえるためにif
体に降ろす必要があります。どのような種類の例外インスタンスでも(明示的にnull
)、throw
の代わりにreturn
にさえも同じことが成り立ちます。
さらに、await
で行を削除しても機能します。
私はこのコードスニペットを別のPCから実行しようとしましたので、PCの問題ではありません。また、私はそれがVSコードのバグだと思って、JetBrainsからRiderで実行しようとしました - 同じ結果。
私はそれが非同期のものだと確信していますが、明示的にどのように動作しますか?
あなたは 'async'と少なくとも1つの 'await'を追加したと言っていましたが、' await'の行がなくても再現しました。 – Altav1sta
@ Altav1sta:そうです、コンパイラは、非同期メソッドです。私はあなたの記事の中で "うまくいく"と解釈して、デバッガが間違ったことではなく_right_のことをしたことを意味しています。私はそれがあなたが意味するものではないと思う。 –
はい、混乱して申し訳ありません。私は__itが同じ働きをしていることを意味していました。つまり、 'if'ボディに入りましたが例外は本当に投げられません – Altav1sta