您的位置:首页 > 产品设计 > UI/UE

Parallel.ForEach , ThreadPool.QueueUserWorkItem

2014-11-26 16:28 176 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ParallelThreadPool
{
class Program
{
static void Main(string[] args)
{
List<int> list = InitialList(100);
Console.WriteLine("ParallelList开始");
ParallelList(list);
Console.WriteLine("ThreadPoolList开始");
ThreadPoolList(list);
Console.ReadKey();
}

/// <summary>
/// 初始化队列
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
private static List<int> InitialList(int length)
{
List<int> list = new List<int>();
for (int i = 0; i < length; i++)
{
list.Add(i);
}
return list;
}

/// <summary>
/// Paralle循环
/// </summary>
/// <param name="list"></param>
private static void ParallelList(List<int> list)
{
Parallel.ForEach(list, (item) =>
{
Console.WriteLine(string.Format("Paralle循环,元素{0}", item));
});
Console.WriteLine("-----------------------------------Paralle----------------------------------");
}

/// <summary>
/// ThreadPool循环
/// </summary>
/// <param name="list"></param>
private static void ThreadPoolList(List<int> list)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate
{
foreach (var item in list)
{
Console.WriteLine(string.Format("ThreadPool循环,元素{0}", item));
}
}));
Console.WriteLine("-----------------------------------ThreadPool----------------------------------");
}
}
}




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

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

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

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

ThreadPool.QueueUserWorkItem 开线程,异步不影响后面代码执行,按照队列顺序一个个执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: