Preventing the Garbage Collector From Ruining Your Day
If you’re working with ZeroMQ, you may run into an exception with the message “Context was terminated”.
It turns out that this is due to the garbage collector cleaning up (or attempting to clean up?) the ZmqContext.
Found this out via this handy thread on Stack, but what about cases where you can’t use a using statement?
For example, in a Windows Service, I create the context on the OnStart method and destroy the context on the OnStop method.
In this case, an alternative is to use the GC.KeepAlive(Object obj) method to prevent the garbage collector from collecting the object until after the call to this method. It seems counter intuitive, but it is actually a signal to tell the garbage collector that it can collect the object at any point after this call.