我一直在尋找這些問題從2009年: C# Events and Thread Safety多線程,競態條件和C#事件 - 爲什麼不嘗試/捕獲?
我也看了一下關於同一主題埃裏克利珀的博客文章: http://blogs.msdn.com/ericlippert/archive/2009/04/29/events-and-races.aspx
這個問題似乎歸結爲,在多線程環境中,你會偶爾會遇到這樣的情況:不同的線程在你的線程(線程A)'if'語句和'調用委託'語句之間取消了註冊委託。
當我讀到這個問題時,我想到了:如果候選對象似乎是競爭條件或拋出的異常之間的選擇,那麼爲什麼不把它包裝在try/catch塊中,而不用擔心要麼?如果你捕獲了nullReferenceException,只需在catch塊中忽略它(簡單地壓制異常)並繼續。
現在,我理解Eric Lippert和John Skeet對C#,多線程和委託人有一點了解,所以有人請花點時間解釋我在這裏失蹤的內容?
如果在catch塊中你要做的所有嘗試/捕捉的重點是什麼? –
問題的關鍵在於抑制一個異常,在這種情況下,您知道可以忽略,並且您不希望最終用戶必須重新啓動應用程序。另外,我沒有說「重新拋出」。我在哪裏說「扔掉」。顯然,我需要澄清這一說法。 – philologon
我對這個問題感到困惑。捕捉異常如何消除競爭? –