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
There is no need for the private ProcessCompleted
member to be an event
- it could just be a field: private EventHandler
- 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
- 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.