Мой ноутбук имеет 2 логических процессора, и я наткнулся на сценарий, в котором, если я планирую 2 задачи, которые занимают более 1 секунды, но не назначает их длительными, последующие задачи запускаются через 1 секунду.Можно ли изменить этот тайм-аут?
Я знаю, что нормальные задачи должны быть краткосрочными - если возможно, намного короче секунды - мне просто интересно, я вижу жестко запрограммированное поведение TPL или могу ли я влиятьэто поведение никак не связано с назначением задач на длительный срок.
Этот метод консольного приложения должен демонстрировать поведение для машины с любым числом процессоров:
static void Main(string[] args)
{
var timer = new Stopwatch();
timer.Start();
int numberOfTasks = Environment.ProcessorCount;
var rudeTasks = new List<Task>();
var shortTasks = new List<Task>();
for (int index = 0; index < numberOfTasks; index++)
{
int capturedIndex = index;
rudeTasks.Add(Task.Factory.StartNew(() =>
{
Console.WriteLine("Starting rude task {0} at {1}ms", capturedIndex, timer.ElapsedMilliseconds);
Thread.Sleep(5000);
}));
}
for (int index = 0; index < numberOfTasks; index++)
{
int capturedIndex = index;
shortTasks.Add(Task.Factory.StartNew(() =>
{
Console.WriteLine("Short-running task {0} running at {1}ms", capturedIndex, timer.ElapsedMilliseconds);
}));
}
Task.WaitAll(shortTasks.ToArray());
Console.WriteLine("Finished waiting for short tasks at {0}ms", timer.ElapsedMilliseconds);
Task.WaitAll(rudeTasks.ToArray());
Console.WriteLine("Finished waiting for rude tasks at {0}ms", timer.ElapsedMilliseconds);
Console.ReadLine();
}
Вот выходные данные приложенияна моем ноутбуке 2 proc:
Starting rude task 0 at 2ms
Starting rude task 1 at 2ms
Short-running task 0 running at 1002ms
Short-running task 1 running at 1002ms
Finished waiting for short tasks at 1002ms
Finished waiting for rude tasks at 5004ms
Press any key to continue . . .
Строки:
Short-running task 0 running at 1002ms
Short-running task 1 running at 1002ms
указывают, что есть тайм-аут на 1 секунду или что-то в этом роде, позволяющее выполнять более короткие задачи по расписанию«грубые» задачи.Вот о чем я спрашиваю.