3
我正在跟踪70-516 MS考试的材料,并且我发现他们解释说如果我们使用AsOrdered方法,我们可以确保在进行并行处理时进行有序处理。并行Linq:订单治疗
但是,运行下面的示例不会按顺序输出结果。
基本上,下面的示例代码以10个整数的可枚举集合开始,然后将其并行化,然后进行排序并最终通过仅选择Compute函数返回偶数的元素进行过滤。计算函数只是返回输入,1秒的延迟之后
private void TestLinqParallel()
{
Stopwatch sw = new Stopwatch();
sw.Start();
var source = Enumerable.Range(1, 10).AsParallel().AsOrdered();
var evenNums = from num in source
where Compute(num) % 2 == 0
select num;
evenNums.ForAll(ev =>
{
Debug.WriteLine(string.Format("{0} on Thread {1}", ev, Thread.CurrentThread.GetHashCode()));
});
sw.Stop();
Debug.WriteLine(string.Format("Done {0}", sw.Elapsed));
}
public int Compute(int num)
{
Debug.WriteLine(string.Format("Computing {0} on Thread {1}", num, Thread.CurrentThread.GetHashCode()));
Thread.Sleep(1000);
return num;
}
本书状态
结果是有序的,至少为偶数,这是什么 的AsOrdered扩展方法是低保。
但这里是我的结果.. 4,处理过程的2
Computing 4 on Thread 11
Computing 3 on Thread 10
Computing 2 on Thread 12
Computing 1 on Thread 6
4 on Thread 11
Computing 7 on Thread 11
Computing 6 on Thread 6
2 on Thread 12
Computing 8 on Thread 12
Computing 5 on Thread 10
Computing 9 on Thread 11
6 on Thread 6
Computing 10 on Thread 6
8 on Thread 12
10 on Thread 6
Done 00:00:03.0561023
的处理谁能帮助过吗?