【发布时间】:2014-11-28 04:16:38
【问题描述】:
我正在将大量文件从一台服务器复制到其他几台服务器。
我有一个具有顺序的复制操作列表,因此服务器 a 的文件位于列表的第一位,服务器 b 的文件位于列表的末尾。
我在列表中使用 AsParallel.AsOrdered() 以确保首先将文件复制到第一台服务器,然后仅当线程空闲到第二台服务器时。
它似乎无法正常工作,因为它会同时将文件复制到两个服务器,我是否遗漏了什么,是否有更好的方法来编写此代码。我检查了大文件以真正看到顺序,它似乎没有反映列表顺序
var dotheCopy = copy.ToArray().OrderBy(a => a.GroupId);
var copyList = new List<CopyOps>();
foreach (var x in dotheCopy)
{
... some validation code
copyList.Add(x);
}
copyList.AsParallel().AsOrdered().WithDegreeOfParallelism(5)
.ForAll(x => this.DoTheCopy(x));
【问题讨论】:
-
您的实际目标似乎是按顺序处理您的项目,但以 5 个为一组,对吗?
-
我们需要做的是首先复制到第一台服务器,但随着线程变得可用开始复制第二台服务器,我们的最大并行度为 5
标签: .net parallel-processing task-parallel-library parallel.foreach