Пример #1
0
        public async Task EmptyParallelTokenSource()
        {
            var pts  = new ParallelTokenSource();
            var time = await TimedTask(pts.WaitForCompletion);

            Assert.InRange(time.TotalMilliseconds, 0, 5);
        }
Пример #2
0
        public async Task SingleTask(int duration, int tolerance)
        {
            var time = await TimedTask(async() =>
            {
                var pts   = new ParallelTokenSource();
                var token = pts.CreateToken();
                _         = Task.Run(async() =>
                {
                    await Task.Delay(duration);
                    token.Complete();
                });

                await pts.WaitForCompletion();
            });

            Assert.InRange(time.TotalMilliseconds, duration - tolerance, duration + tolerance);
        }
Пример #3
0
        public async Task MultiExecution(int waitTime, int interval, int tolerance)
        {
            var time = await TimedTask(async() =>
            {
                var pts = new ParallelTokenSource();
                for (int i = waitTime; i > 0; i -= interval)
                {
                    var current = i;
                    var token   = pts.CreateToken();
                    _           = Task.Run(async() =>
                    {
                        await Task.Delay(current);
                        token.Complete();
                    });
                }

                await pts.WaitForCompletion();
            });

            Assert.InRange(time.TotalMilliseconds, waitTime - tolerance, waitTime + tolerance);
        }
Пример #4
0
 public static void RegisterTo(this Task task, ParallelTokenSource pts)
 => pts.RunTask(task);