Si tiene algunos bloques de código que le gustaría evitar la ejecución cuando se está saliendo y limpiando el objeto, ¿se podría usar un bloqueo para evitar la ejecución?¿Qué sucede con Monitor.Enter sin un Monitor.Exit correspondiente?
Monitor.TryEnter(cleanupLock, ref acquiredLock);
TryEnter se podría utilizar para asegurarse de que el código no se ejecuta, y puesto que no espera a que la cerradura no será un punto muerto.
Otro subproceso podría atrapar el bloqueo cuando determina que es hora de apagarlo.
Monitor.Enter(cleanupLock);
Si el subproceso de limpieza nunca llama
Monitor.Exit(cleanupLock);
haría esta causa un problema?
Ir contra el uso convencional es un buen argumento en contra de este patrón. –