我只想并行化.NET Core控制台应用程序的一部分,但是我还想从命令行参数动态启动线程。我正在利用模数运算符在线程之间大致均匀地划分项目列表。
我尝试了一些事情:
for (var t = 0; t < numThreads; t++)
{
//spin up a thread
var group = data.Where(x => x.ID % (ulong)numThreads == (ulong)t).ToList();
jobThreads.Add(new JobThread
{
ThreadNumber = t,
Data = group,
});
}
Parallel.ForEach(jobThreads, (thread) =>
{
DoWork(thread.Data);
});
Parallel.ForEach是纯净的语法糖,但实际上并未并行运行线程。它等待一个线程结束,然后再旋转一个新线程。
使用for循环创建Task对象的列表,然后我再用WaitAll也不起作用。它也可以串联而不是并联运行。
“原始”实际上最有效,它独立/并行运行线程,但是在继续执行程序的下一部分之前,我无法告知它们何时完成(好像没有线程一样运行)如预期的那样,在此之前-我只是不知道通过for循环整体创建它们时是否有办法“等待”它们。
for (var t = 0; t < numThreads; t++)
{
//spin up a thread
var group = data.Where(x => x.ID % (ulong)numThreads == (ulong)t).ToList();
Thread thread = new Thread(new ParameterizedThreadStart(DoWork);
thread.Start(group);
}
编辑:是的,重复的正是我想要的。谢谢