将线程池输出排序为流数据

时间:2011-12-22 20:40:21

标签: c# .net

有很多关于同步线程的资源,即何时以及如何启动它们 但是,我想以有序的方式启动Threads并检索输出结果。

例如,如果我有:
线程1输出:数据1
线程2输出:数据2
线程3输出:数据3

我会顺序启动线程(线程1,2,3),我想检索有序列表中的数据(数据1,2,3)。如您所知,我无法保证线程2将在线程3之前完成并提供其输出。因此,当线程提供所需的输出时,我需要一些有效的方法来重新引入顺序性和顺序。

编辑:
非常重要的精度(由评论员指出):
线程池将全天候运行,数据不是固定集,而是数据流。
另外,由于传统问题,我必须使用.Net 3.5。

1 个答案:

答案 0 :(得分:1)

这里的一个好选择是使用PLINQ。

它允许您编写创建数据的查询,如下所示:

var results = inputData.AsParallel().AsOrdered().Select(inputValue => ComputeOutputData(inputValue));

在这种情况下,对AsOrdered的调用将允许查询并行运行,但您的结果会以适当的原始顺序返回。