示例#1
0
        public async Task PrespoolMaintainOrder()
        {
            var stopwatch      = new Stopwatch();
            var taskToPrespool = EnumerableAsync.YieldAsync <Func <int, Task> >(
                async(yieldAsync) =>
            {
                for (int i = 0; i < 100; i++)
                {
                    await Task.Run(() => Thread.Sleep(10));
                    await yieldAsync(i);
                }
                return;
            });

            // Test fails without this line
            taskToPrespool = taskToPrespool.PrespoolAsync();

            await Task.Run(() => Thread.Sleep(1000));

            stopwatch.Start();
            int index = -1;
            await taskToPrespool.ForAllAsync(
                async (i) =>
            {
                await Task.FromResult(false);
                Assert.IsTrue(index < i);
                index = i;
            });

            stopwatch.Stop();
            Assert.IsTrue(stopwatch.ElapsedMilliseconds < 500);
        }
        public async Task EnumerableAsyncBrakedTests()
        {
            var rand       = new Random();
            var yieldCount = 0;
            var items      = EnumerableAsync.YieldAsync <TestDelegateAsync>(
                async(yield) =>
            {
                for (int i = 0; i < 100; i++)
                {
                    yieldCount++;
                    await yield(i, "foo", new List <int>());
                }
            });

            int count       = 0;
            var culledItems = items.TakeAsync(50);
            await culledItems.ForAllAsync(
                async (a, b, c) =>
            {
                await Task.Run(() => Thread.Sleep(rand.Next() % 20));
                count++;
            });

            Assert.AreEqual(50, count);
            Assert.AreEqual(51, yieldCount);
        }
示例#3
0
        public async Task PrespoolAllowsParallel()
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var taskToPrespool = EnumerableAsync.YieldAsync <Func <int, Task> >(
                async(yieldAsync) =>
            {
                var tasks = Enumerable.Range(0, 100).Select(async(i) =>
                {
                    await Task.Run(() => Thread.Sleep(1000));
                    await yieldAsync(i);
                });
                await Task.WhenAll(tasks);
                return;
            });

            // Test fails without this line
            taskToPrespool = taskToPrespool.PrespoolAsync();

            int total = 0;
            await taskToPrespool.ForAllAsync(
                async (i) =>
            {
                await Task.FromResult(false);
                total += i;
            });

            stopwatch.Stop();
            Assert.IsTrue(stopwatch.ElapsedMilliseconds < 25000);
            Assert.AreEqual(4950, total);
        }
        public async Task EnumerableAsyncGerenicTests()
        {
            var rand  = new Random();
            var items = EnumerableAsync.YieldAsync <TestDelegateAsync> (
                async(yield) =>
            {
                for (int i = 0; i < 100; i++)
                {
                    await Task.Run(() => Thread.Sleep(rand.Next() % 20));
                    var yieldTask = yield(i, "foo", new List <int>());
                    try
                    {
                        await yieldTask;
                    } catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                await yield(110, "bar", new List <int>());
                await yield(111, "food", new List <int>());
                await yield(112, "barf", new List <int>());
            });

            int count = 0;
            await items.ForAllAsync(
                async (a, b, c) =>
            {
                await Task.Run(() => Thread.Sleep(rand.Next() % 30));
                await Task.FromResult(true);
                count++;
            });

            Assert.AreEqual(103, count);
        }
        private IEnumerableAsync <StorageDelegateAsync> FindByParentIdSomeNotFound(Guid parentId)
        {
            var items = EnumerableAsync.YieldAsync <StorageDelegateAsync>(
                async(yield) =>
            {
                await Task.FromResult(true);
                throw new Exception("NotFoundStorage");
            });

            return(items);
        }
        private IEnumerableAsync <StorageDelegateAsync> FindByParentId(Guid parentId)
        {
            var items = EnumerableAsync.YieldAsync <StorageDelegateAsync>(
                async(yield) =>
            {
                var tasks = new List <Task>();
                for (int i = 0; i < 100; i++)
                {
                    await yield(i, "foo");
                }

                await yield(110, "bar");
                await yield(111, "food");
                await yield(112, "barf");
            });

            return(items);
        }
        private IEnumerableAsync <BizObjectInfoDelegateAsync> GetBizObject(Guid parentId)
        {
            var itemsInStorage = FindByParentId(parentId);
            var items          = EnumerableAsync.YieldAsync <BizObjectInfoDelegateAsync>(
                async(yield) =>
            {
                await itemsInStorage.ForAllAsync(async(a, b) =>
                {
                    if (a % 5 == 0)
                    {
                        return;
                    }
                    await yield(a, b, new object());
                });
            });

            return(items);
        }
        public async Task EnumerableAsyncNotAsyncTests()
        {
            var items = EnumerableAsync.YieldAsync <TestDelegate>(
                async(yield) =>
            {
                await Task.FromResult(true);
                yield(112, "barf", new List <int>());
            });

            try
            {
                await items.ForAllAsync(
                    async (a, b, c) => await Task.FromResult(true));

                Assert.Fail("Cannot have non-async IEnumerableAsync delegates");
            } catch (ArgumentException ex)
            {
                Assert.AreEqual(typeof(TestDelegate).FullName, ex.ParamName);
            }
        }
        private async Task <IEnumerableAsync <BizObjectInfoDelegateAsync> > GetBizObjectSomeNotFound(Guid parentId)
        {
            try
            {
                var itemsInStorage = FindByParentIdSomeNotFound(parentId);
                await itemsInStorage.ForAllAsync((a, b) => Task.FromResult(true));

                Assert.Fail();
            } catch (Exception ex)
            {
                Assert.AreEqual("NotFoundStorage", ex.Message);
            }
            var items = EnumerableAsync.YieldAsync <BizObjectInfoDelegateAsync>(
                async(yield) =>
            {
                await Task.FromResult(true);
                throw new Exception("NotFoundBiz");
            });

            return(items);
        }
        public async Task IterateAsyncGenericTests()
        {
            var items = EnumerableAsync.YieldAsync <TestDelegateAsync>(
                async(yield) =>
            {
                Thread.Sleep(1000);
                var tasks = new List <Task>();
                for (int i = 0; i < 100; i++)
                {
                    var yieldTask = yield(i, "foo", new List <int>());
                    await yieldTask;
                }
            });
            var results = items.ToEnumerable <TestDelegateAsync, TestDelegateResult <int>, int>(
                (a, b, c) =>
            {
                Thread.Sleep(20);
                return(a);
            });

            Assert.AreEqual(100, results.Count());
        }