Ejemplo n.º 1
0
    // (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);
        }
    }
Ejemplo n.º 2
0
    // (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);
        }
    }