public MultiToken(GenericMonitor <T> sync, IEnumerable <T> keys) { foreach (var key in keys.Distinct().OrderBy(k => k)) { _tokens.Add(new Token(sync, key)); } }
public void Dispose() { if (_sync == null) { return; } _sync.Exit(_key, _lockTaken); _sync = null; }
public static IDisposable Lock <T>(this GenericMonitor <T> obj, T key) => new Token <T>(obj, key);
public Token(GenericMonitor <T> sync, T key) { _sync = sync; _key = key; _lockTaken = sync.Enter(key); }