public async void First_Win_Sync() { var ttr = new TestTaskRunner(); var t = AsyncEnumerable.Amb( AsyncEnumerable.Range(1, 5) .DoOnNext(async v => { await ttr.CreateCompleteTask(500); }), AsyncEnumerable.Range(6, 5) .DoOnNext(async v => { await ttr.CreateCompleteTask(1000); }) ) .GetAsyncEnumerator() ; try { for (var i = 1; i <= 5; i++) { var t0 = t.MoveNextAsync(); await ttr.TaskQueued(i * 500); ttr.AdvanceTimeBy(500); await t0; Assert.Equal(i, t.Current); } Assert.False(await t.MoveNextAsync()); } finally { await t.DisposeAsync(); } }
public async void RightTaskQueued_Absolute() { for (var i = 0; i < 1000; i++) { var ttr = new TestTaskRunner(50); var t1 = Task.Run(() => { ttr.CreateCompleteTask(100, true); }); var t2 = Task.Run(() => { ttr.CreateCompleteTask(101, true); }); await ttr.TaskQueued(101); await t1; await t2; ttr.AdvanceTimeBy(101); Assert.False(ttr.HasTasks); } }