Using multithreading: Tracking WeakReference to objects from multiple threads on newest questions tagged multithreading – Stack Overflow

I am designing a static message bus that would allow subscribing to and publishing of messages of an arbitrary type. To avoid requiring observers to unsubscribe explicitly, I would like to keep track of WeakReference objects that point to delegates instead of tracking delegates themselves. I ended up coding something similar to what Paul Stovell described in his blog http://www.paulstovell.com/weakevents.

My problem is this: as opposed to Paul’s code, my observers subscribe to messages on one thread, but messages may be published on another. In this case, I observe that by the time I need to notify observers, my WeakReference.Target values are null indicating that targets have been collected, even though I know for certain they weren’t. The problem persists for both short and long weak references.

Conversely, when subscribing and publishing is done from the same thread, the code works fine. The latter is true even if I actually end up enumerating over targets on a new thread from ThreadPool, for as long as the request initially comes from the same thread I subscribe to messages on.

I understand that this is a very specific case, so any help is greatly appreciated.

My question is: should I not be able to reliably access WeakReference objects from multiple threads provided proper thread synchronization is in place? It appears that I cannot, which does not make much sense to me. So, what am I not doing right?

See Answers


source: http://stackoverflow.com/questions/8826011/tracking-weakreference-to-objects-from-multiple-threads
Using multithreading: using-multithreading



online applications demo