當我跨過斷點在我的代碼我也遇到過調試的奇怪的行爲:奇怪的調試器行爲
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
),甚至return
而不是throw
都是一樣的。
除此之外,即使我刪除與await
行。
我試圖從不同的PC運行此代碼段,所以它不是PC麻煩。此外,我認爲這是VS代碼中的錯誤,並試圖從JetBrains的Rider中運行 - 結果相同。
我確定這是異步的事情,但它是如何明確的工作?
你說「添加'async'和至少一個'await'」,但我轉載,即使沒有在所有 – Altav1sta
@ Altav1sta用'await'行:好吧,那麼似乎編譯器生成的狀態機的所有'異步「方法。我在你的文章中解釋了「它的作用」,意思是調試器做了_right_事情,而不是錯誤的事情。我想這不是你的意思。 –
是的,抱歉讓人困惑。我的意思是__it的工作原理是相同的,即我輸入'if' body,但是異常並沒有真正拋出 – Altav1sta