コード例 #1
0
        public void DisposeCancelsQueuedTasks()
        {
            var fxScheduler = new FixtureScheduler();
            var scheduler   = new GrainTaskScheduler(fxScheduler, new ExceptionSink());

            var taskSource = new TaskCompletionSource <bool>();
            var tasks      = new List <Task>();

            Enumerable.Range(0, 20)
            .Aggregate(
                (Task)taskSource.Task,
                (lastTask, _) => {
                var t = lastTask.ContinueWith(__ => { }, scheduler);
                tasks.Add(t);
                return(t);
            });

            scheduler.Dispose();

            taskSource.SetResult(true);

            Assert.That(
                () => Task.WhenAll(tasks),
                Throws.Exception.InstanceOf <TaskSchedulerException>()); //other exceptions = bad; no completion = bad
        }
コード例 #2
0
        public async Task SchedulerIsIdleImmediatelyIfEmpty()
        {
            var scheduler = new FixtureScheduler();

            await scheduler.WhenIdle();
        }