public async Task SchedulingSimpleTest() { const int TasksCount = 5000; var threadIds = new HashSetEx <int>(); var priorities = new HashSetEx <ThreadPriority>(); var taskWasNotContinuedInline = false; var tasks = new Task[TasksCount]; var rnd = new Random(0); for (int i = 0; i < TasksCount; i++) { tasks[i] = HeavyComputationTaskScheduler.Run( async() => { lock (threadIds) { threadIds.Add(Thread.CurrentThread.ManagedThreadId); priorities.Add(Thread.CurrentThread.Priority); } Thread.SpinWait(100_000 * rnd.Next(3, 6)); await Task.Yield(); lock (threadIds) { threadIds.Add(Thread.CurrentThread.ManagedThreadId); priorities.Add(Thread.CurrentThread.Priority); } await Task.Delay(1); var tid = Thread.CurrentThread.ManagedThreadId; await Task.CompletedTask; if (tid != Thread.CurrentThread.ManagedThreadId) { taskWasNotContinuedInline = true; } lock (threadIds) { threadIds.Add(Thread.CurrentThread.ManagedThreadId); priorities.Add(Thread.CurrentThread.Priority); } Thread.SpinWait(100_000 * rnd.Next(3, 6)); }); } await Task.WhenAll(tasks); //// threadIds.Count.Should().Be(Environment.ProcessorCount); priorities.Count.Should().Be(1); priorities.Single().Should().Be(ThreadPriority.BelowNormal); taskWasNotContinuedInline.Should().BeFalse(); }