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();
            }
        }
Beispiel #2
0
        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);
            }
        }