我有一份我希望并行执行的任务列表,但以有限的方式执行,几乎就像没有我必须管理的批处理一样。我的方法是使用Parallel.ForEach和ParallelOptions的MaxDegreeOfParallelism属性。我发现无论我设定什么价值,所有任务都是在同一时间开始的。这是不受欢迎的行为。我希望同时执行的任务数量等于该属性。我写了说明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
Hi Seapoe,MaxDegreeOfParallelism会影响可以并发运行的线程数。它不确定每个线程何时启动。 – Riv