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