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