public static void Unregister(ITimedDictionary timedDictionary) { if (timedDictionary == null) { throw new ArgumentNullException(nameof(timedDictionary)); } DateTime dummy; if (!TimedDictionaries.TryRemove(timedDictionary, out dummy)) { return; } if (Interlocked.Decrement(ref TimedDictionartiesCount) != 0) { return; } var cleanUpTask = Interlocked.Exchange(ref _cleanUpTask, null); cleanUpTask?.Cancel(); }
public static void Register(ITimedDictionary timedDictionary) { if (timedDictionary == null) { throw new ArgumentNullException(nameof(timedDictionary)); } if (!TimedDictionaries.TryAdd(timedDictionary, DateTime.UtcNow)) { return; } if (Interlocked.Increment(ref TimedDictionartiesCount) != 1) { return; } var cleanUpTask = new CancellableTask(CleanUp); if (Interlocked.CompareExchange(ref _cleanUpTask, cleanUpTask, null) == null) { cleanUpTask.Start(); } }