首页 > 代码库 > Parallel.ForEach , ThreadPool.QueueUserWorkItem

Parallel.ForEach , ThreadPool.QueueUserWorkItem

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 using System.Threading.Tasks; 7  8 namespace ParallelThreadPool 9 {10     class Program11     {12         static void Main(string[] args)13         {14             List<int> list = InitialList(100);15             Console.WriteLine("ParallelList开始");16             ParallelList(list);17             Console.WriteLine("ThreadPoolList开始");18             ThreadPoolList(list);19             Console.ReadKey();20         }21 22         /// <summary>23         /// 初始化队列24         /// </summary>25         /// <param name="length"></param>26         /// <returns></returns>27         private static List<int> InitialList(int length)28         {29             List<int> list = new List<int>();30             for (int i = 0; i < length; i++)31             {32                 list.Add(i);33             }34             return list;35         }36 37         /// <summary>38         /// Paralle循环39         /// </summary>40         /// <param name="list"></param>41         private static void ParallelList(List<int> list)42         {43             Parallel.ForEach(list, (item) =>44             {45                 Console.WriteLine(string.Format("Paralle循环,元素{0}", item));46             });47             Console.WriteLine("-----------------------------------Paralle----------------------------------");48         }49 50         /// <summary>51         /// ThreadPool循环52         /// </summary>53         /// <param name="list"></param>54         private static void ThreadPoolList(List<int> list)55         {56             ThreadPool.QueueUserWorkItem(new WaitCallback(delegate57             {58                 foreach (var item in list)59                 {60                     Console.WriteLine(string.Format("ThreadPool循环,元素{0}", item));61                 }62             }));63             Console.WriteLine("-----------------------------------ThreadPool----------------------------------");64         }65     }66 }

Parallel.ForEach:执行foreach操作,其中可能会并行迭代。

ThreadPool.QueueUserWorkItem:将方法排入队列以便执行。 此方法在有线程池线程变得可用时执行。

仅作为自己记录一下,验证猜想:

Parallel.ForEach不异步,并行迭代,执行顺序会乱。

ThreadPool.QueueUserWorkItem 开线程,异步不影响后面代码执行,按照队列顺序一个个执行。

Parallel.ForEach , ThreadPool.QueueUserWorkItem