多執行緒環境中的事件調度安全
在多執行緒應用程式中使用事件時,確保執行緒安全至關重要,以避免潛在的競爭條件。事件分派的常見方法是在呼叫事件之前檢查事件是否為空。然而,這提出了一個問題:
另一個執行緒可以在空檢查和事件呼叫之間改變事件呼叫清單嗎?
為了解決這個問題,一個更健壯的方法解決方案是使用以下模式:
protected virtual void OnSomeEvent(EventArgs args) { EventHandler ev = SomeEvent; if (ev != null) ev(this, args); }
此技術有效因為:
雖然此解決方案解決了空事件的情況,它不處理複製後事件處理程序或事件訂閱失效的可能性。如需更全面的解決方案和進一步討論,請參閱提供的外部資源。
此外,在 C# 6.0 中,Krzysztof 的解決方案(如答案所述)提供了可行的替代方案。
以上是在多執行緒 .NET 應用程式中分派事件時會出現執行緒安全性問題嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!