public void EventuallyTrySetFromTaskGeneric()
    {
        var r1 = new TaskCompletionSource <int>();
        var r2 = new TaskCompletionSource <int>();
        var t3 = r1.EventuallyTrySetFromTask(r2.Task);

        r1.Task.AssertNotCompleted();
        t3.AssertNotCompleted();

        r2.TrySetResult(1);
        t3.AssertRanToCompletion().AssertIsTrue();
        r1.Task.AssertRanToCompletion().AssertEquals(1);

        r1.EventuallyTrySetFromTask(r2.Task).AssertRanToCompletion().AssertIsFalse();
    }
    public void EventuallyTrySetFromTaskVoid()
    {
        var r1 = new TaskCompletionSource();
        var r2 = new TaskCompletionSource();
        var t3 = r1.EventuallyTrySetFromTask(r2.Task);

        r1.Task.AssertNotCompleted();
        t3.AssertNotCompleted();

        r2.TrySetRanToCompletion();
        t3.AssertRanToCompletion().AssertIsTrue();
        r1.Task.AssertRanToCompletion();

        r1.EventuallyTrySetFromTask(r2.Task).AssertRanToCompletion().AssertIsFalse();
    }