将列表分成组

时间:2015-12-07 10:08:55

标签: c# multithreading

我发布了一个问题here

得到this answer

Parallel.ForEach(lines.GroupBy(line => line.TheUser), grp => {
// processing user grp.Key
foreach(var line in grp) {
    // do the stuff here
}
});

如何分别访问用户1或用户2的组而不是foreach?

在上面的代码中,它正在对它们进行排序和打印。我希望小组明智地访问它们。

2 个答案:

答案 0 :(得分:1)

lines.AsParallel().Select(x => x.TheUser)  

应该返回一个IEnumrable of TheUser ...

答案 1 :(得分:0)

你真的应该使用微软的Reactive Framework。只是NuGet" Rx-Main"然后你可以这样做:

var query =
    from grp in lines.GroupBy(line => line.TheUser).ToObservable()
    from line in grp.ToObservable()
    from output in Observable.Start(() => /* Do lengthy process here */)
    select new { line, output };

query.Subscribe(result => { /* get the results here */ });

现在,只是为了表明这是有效的:

var query =
    from grp in Enumerable.Range(0, 20).GroupBy(x => x % 5).ToObservable()
    from line in grp.ToObservable()
    from tid in Observable.Start(() => System.Threading.Thread.CurrentThread.ManagedThreadId)
    select new { line, tid };

当使用query.Subscribe(x => { ... })运行时,它会提供这种输出:

results

您可以看到输入值的ManagedThreadId更改,因此处理并行发生。