public void EventuallySetFromTaskGeneric() {
        var r1 = new TaskCompletionSource<int>();
        var r2 = new TaskCompletionSource<int>();
        var t3 = r1.EventuallySetFromTask(r2.Task);
        r1.Task.AssertNotCompleted();
        t3.AssertNotCompleted();

        r2.SetResult(1);
        t3.AssertRanToCompletion();
        r1.Task.AssertRanToCompletion().AssertEquals(1);
        
        r1.EventuallySetFromTask(r2.Task).AssertFailed<InvalidOperationException>();
    }
    public void EventuallySetFromTaskVoid() {
        var r1 = new TaskCompletionSource();
        var r2 = new TaskCompletionSource();
        var t3 = r1.EventuallySetFromTask(r2.Task);
        r1.Task.AssertNotCompleted();
        t3.AssertNotCompleted();

        r2.SetRanToCompletion();
        t3.AssertRanToCompletion();
        r1.Task.AssertRanToCompletion();

        r1.EventuallySetFromTask(r2.Task).AssertFailed<InvalidOperationException>();
    }