C#: Thread-safe events

后端 未结 2 536
借酒劲吻你
借酒劲吻你 2020-12-18 08:00

Is the implementation below thread-safe? If not what am I missing? Should I have the volatile keywords somewhere? Or a lock somewhere in the OnProcessingC

2条回答
  •  囚心锁ツ
    2020-12-18 08:53

    There is no need for the private ProcessCompleted member to be an event - it could just be a field: private EventHandler ProcessCompleted; - inside the class it always goes straight to the field, so the event stuff is lost anyway.

    The approach you've shown with an explicit lock object isn't much more thread-safe than just having a field-like event (i.e. public event EventHandler ProcessCompleted; - the only difference is that you aren't locking "this" (which is a good thing - you should ideally avoid locking on this).. The "handler variable" approach is the right one, but there are still side-effects you should be aware of.

提交回复
热议问题