Ejemplo n.º 1
0
        public async Task TestRunInParallel_ParallelismDegree(int totalTasks, int maxDegreeOfParallelism)
        {
            VisitorsCounter visitorsCounter = new VisitorsCounter(maxDegreeOfParallelism);
            await TaskUtils.RunInParallel(((Func <Task>)(async() =>
            {
                visitorsCounter.Enter();
                await Task.Delay(RUNNING_TIME);
                visitorsCounter.Leave();
            })).Repeat(totalTasks), maxDegreeOfParallelism);

            Assert.Zero(visitorsCounter.CurrentVisitors);
            Assert.AreEqual(totalTasks, visitorsCounter.TotalVisitors);
            Assert.AreEqual(Math.Min(maxDegreeOfParallelism, totalTasks), visitorsCounter.MaxConcurrentVisitors);
        }
Ejemplo n.º 2
0
        public void TestRunInParallel_ErrorHandling(ICollection <bool> whenToThrowException, int maxDegreeOfParallelism)
        {
            VisitorsCounter            visitorsCounter = new VisitorsCounter(maxDegreeOfParallelism);
            IEnumerable <Func <Task> > opeartions      = whenToThrowException.Select((toThrow) => (Func <Task>)(async() =>
            {
                visitorsCounter.Enter();
                await Task.Delay(RUNNING_TIME);
                visitorsCounter.Leave();
                if (toThrow)
                {
                    throw new ArgumentException();
                }
            }));
            int errorsNumber = whenToThrowException.Count((b) => b);

            Assert.AreEqual(errorsNumber,
                            Assert.ThrowsAsync <AggregateException>(() => TaskUtils.RunInParallel(opeartions, maxDegreeOfParallelism)).InnerExceptions.Count);
            Assert.Zero(visitorsCounter.CurrentVisitors);
            Assert.AreEqual(whenToThrowException.Count, visitorsCounter.TotalVisitors);
            Assert.AreEqual(Math.Min(maxDegreeOfParallelism, whenToThrowException.Count), visitorsCounter.MaxConcurrentVisitors);
        }