/// <summary>
        /// Registers a new fake timer entry and returns it.
        /// Note how we are capturing the activation task scheduler to ensure we can tick the fake timers within the activation context.
        /// </summary>
        public IDisposable RegisterTimer(Grain grain, Func <object, Task> asyncCallback, object state, TimeSpan dueTime, TimeSpan period)
        {
            var timer = new FakeTimerEntry(this, TaskScheduler.Current, grain, asyncCallback, state, dueTime, period);

            timers[timer] = timer;
            return(timer);
        }
 /// <summary>
 /// Removes a timer.
 /// </summary>
 public void Remove(FakeTimerEntry entry) => timers.TryRemove(entry, out _);