using System; namespace ScreenConnect; public class StateDependentContextHolder(Func stateInvalidationChecker) : ContextHolder where TRunContext : RunContext { private TState? state; public TState? GetState() { return state; } public void SetState(TState value) { lock (base.SyncLock) { state = value; if (base.CurrentContext != null && stateInvalidationChecker(base.CurrentContext, value)) { base.CurrentContext.SignalOutOfBandShutdown(); } } } public IDisposable WithNewContext(Func contextCreator, out TRunContext currentContext) { return WithNewContext(() => contextCreator(state), out currentContext); } }