使用Parallel.ForEach或通过foreach填充List <task>

时间:2017-09-13 21:07:16

标签: c# multithreading foreach

我正在尝试使用多线程。我想运行一个Task列表。我有两个选择,我写下两个代码如下:

 List<Task> taskList=new List<Task>();
        foreach (var item in itemList)
        {
            taskList.Add(Task.Factory.StartNew(()=> DoTasks(item,new Random().Next(15,40))));
        }
        Task.WaitAll(taskList.ToArray());
        Console.WriteLine("All Tasks Done!");

而且:

 Parallel.ForEach(itemList, item => DoTasks(item, new Random().Next(15, 40)));
        Console.WriteLine("All Tasks Done!");

我的问题:
哪种表现更好?
管理已打开的任务Parallel.ForEach是否有ThreadPool? 有没有更好的办法?

1 个答案:

答案 0 :(得分:0)

Parallel.Foreach是更好的选择。它将重用当前线程来执行DoTasks,因此线程总数将小于第一种情况。此外,它将立即开始执行,而在foreach的情况下,在创建任务的时刻和调度程序将首先运行任务的时刻之间可能存在一些延迟。