// (Try)SetFromTask public static void SetFromTask <T>(this TaskSource <T> target, Task <T> source, CancellationToken candidateToken) { if (source.IsCanceled) { target.SetCanceled(candidateToken.IsCancellationRequested ? candidateToken : CancellationToken.None); } else if (source.Exception != null) { target.SetException(source.Exception); } else { target.SetResult(source.Result); } }
// (Try)SetFromResult public static void SetFromResult <T>(this TaskSource <T> target, Result <T> source, CancellationToken candidateToken) { if (source.IsValue(out var v, out var e)) { target.SetResult(v); } else if (e is OperationCanceledException && candidateToken.IsCancellationRequested) { target.SetCanceled(candidateToken); } else { target.SetException(e); } }