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();
            }
        }