public CancellationTokenTaskSource(CancellationToken cancellationToken) { if (!cancellationToken.IsCancellationRequested) { var tcs = new TaskCompletionSource <TResult>(DefaultTcsCreationOptions); _ctr = cancellationToken.Register(() => tcs.TrySetCanceled(), useSynchronizationContext: false); Task = tcs.GetTaskSafe(); } else { _ctr = null; Task = FromCanceled <TResult>(cancellationToken); } }