Exemplo n.º 1
0
 public static Task <T> TimeoutAfter <T>(
     this ITestScheduler testScheduler,
     TimeSpan timeout,
     CancellationToken cancellationToken,
     DeferredTask <T> deferredTask)
 => cancellationToken.Amb(
     deferredTask,
     ct => testScheduler.Timeout(timeout, ct).ThrowResult <T>());
Exemplo n.º 2
0
        public void ExecuteOncePerId(string id, Func <Task> action, TimeSpan delay)
        {
            Contract.Assert(id != null);
            Contract.Assert(action != null);

            lock (_actions)
            {
                DeferredTask task;

                if (!_actions.TryGetValue(id, out task) || task.WasExecuted)
                {
                    _actions[id] = task = new DeferredTask()
                    {
                        Id = id
                    };
                }

                task.Task     = action;
                task.Modified = DateTime.UtcNow;
                task.Delay    = delay;
            }

            _waitHandle.Set();
        }