public async Task TestSequentialEnumeratorAsync()
        {
            var start           = MAX_ITEMS;
            var completionState = new Int32[start];
            var r = new Random();
            MoveNextAsyncDelegate <Int32> moveNext = async() =>
            {
                var decremented = Interlocked.Decrement(ref start);
                await Task.Delay(r.Next(100, 500));

                return(decremented >= 0, MAX_ITEMS - decremented - 1);
            };

            var enumerable = AsyncEnumerationFactory.CreateSequentialEnumerable(() => AsyncEnumerationFactory.CreateSequentialStartInfo(
                                                                                    moveNext,
                                                                                    null
                                                                                    ),
                                                                                DefaultAsyncProvider.Instance);
            Func <Int32, Task> callback = async idx =>
            {
                await Task.Delay(r.Next(100, 900));

                Assert.IsTrue(completionState.Take(idx).All(s => s == 1));
                Interlocked.Increment(ref completionState[idx]);
            };
            var itemsEncountered = await enumerable.EnumerateAsync(callback);

            Assert.AreEqual(itemsEncountered, completionState.Length);
            Assert.IsTrue(completionState.All(s => s == 1));
        }