[英]Task Parallel Library with QueueUserWorkItem
我正在看一些代码,在其中看到以下代码:
Parallel.ForEach(names, new ParallelOptions { TaskScheduler = { }, MaxDegreeOfParallelism = Environment.ProcessorCount }, x =>
{
ThreadPool.QueueUserWorkItem(y =>
{
Thread.Sleep(1000);
Console.WriteLine("Processing {0} on thread {1}", names[i++],
Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
});
});
我的问题是,在Parallel.ForEach中使用QueueUserWorkItem是否有任何优势? 对我来说,似乎我们每个元素创建2个线程,一个在ForEach中,另一个在QueueUserWorkItem中。
这段代码没有多大意义。 主要特点Paralell.ForEach
是它执行使用并联,并等待 ,直到所有的代码完成执行的代码。 此代码Paralell.ForEach
的目的。 最好问一下作者的意图。
该代码的作用是,它将在每次迭代内启动paralell循环,并将工作排队到ThreadPool.QueueUserWorkItem
并立即返回。 它不会等到所有工作完成。
您的代码并不比以下代码更好。 几乎等于一个简单的foreach循环。
foreach(var name in names)
{
ThreadPool.QueueUserWorkItem(y =>
{
Thread.Sleep(1000);
Console.WriteLine("Processing {0} on thread {1}", names[i++],
Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
});
});
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.