public void Run_UpToConcurrencyLimit() { var scheduler = new LimitedConcurrencyTaskScheduler(CoreCount); var tasks = CreateTasks(CoreCount, SleepThenReturnStartTime); var baseline = DateTime.UtcNow; var startTimes = RunTasks(tasks, scheduler); startTimes.Count(t => t < baseline + GraceTime).Should().Be(CoreCount); }
private static T[] RunTasks <T>(Task <T>[] tasks, LimitedConcurrencyTaskScheduler scheduler) { scheduler.CurrentConcurrencyLevel.Should().Be(0); foreach (var task in tasks) { task.Start(scheduler); } scheduler.CurrentConcurrencyLevel.Should().BeGreaterThan(0); scheduler.CurrentConcurrencyLevel.Should().BeLessOrEqualTo(scheduler.MaximumConcurrencyLevel); Task.WaitAll(tasks); scheduler.CurrentConcurrencyLevel.Should().Be(0); return(tasks .Select(t => t.Result) .ToArray()); }
public void MaximumConcurrencyLevel() { var scheduler = new LimitedConcurrencyTaskScheduler(42); scheduler.MaximumConcurrencyLevel.Should().Be(42); }