У меня есть список задач, которые я хочу выполнять параллельно, но ограниченным образом, почти как доработка без меня, чтобы управлять им. Мой подход состоял в том, чтобы использовать Parallel.ForEach и свойство MaxDegreeOfParallelism ParallelOptions. Я нахожу, что независимо от того, что я установил значение, все задачи запускаются в одно и то же время. Это нежелательное поведение. Я хочу, чтобы количество задач, выполняемых одновременно, было равно свойству. Я написал простой пример для иллюстрацииMaxDegreeOfParallelism Не применяется к списку задач?
class Program
{
static void Main(string[] args)
{
var numbers = Enumerable.Range(1, 5);
var tasks = new List<Task>();
foreach (int number in numbers)
{
tasks.Add(new Task(() => {Console.WriteLine("Starting thread {0} at time {1}. Starting delay...", Thread.CurrentThread.ManagedThreadId, DateTime.Now);
Thread.Sleep(1000);
Console.WriteLine("{0} is done at {1}.", Thread.CurrentThread.ManagedThreadId, DateTime.Now);}));
}
Parallel.ForEach(tasks, new ParallelOptions() { MaxDegreeOfParallelism = 2 }, t =>
{
t.Start();
});
Task.WaitAll(tasks.ToArray());
}
}
Является ли мой подход или понимание неправильно?
После прочтения документации и некоторых других вопросов - я разделяю ваше понимание, оно должно работать. Надеюсь, что кто-то знает ответ, этот меня немного испортит. – zmbq
Привет Seapoe, MaxDegreeOfParallelism влияет на количество потоков, которые могут запускаться одновременно. Он не определяет, когда начинается каждый поток. – Riv