我发布了一个问题here
Parallel.ForEach(lines.GroupBy(line => line.TheUser), grp => {
// processing user grp.Key
foreach(var line in grp) {
// do the stuff here
}
});
如何分别访问用户1或用户2的组而不是foreach?
在上面的代码中,它正在对它们进行排序和打印。我希望小组明智地访问它们。
答案 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 => { ... })
运行时,它会提供这种输出:
您可以看到输入值的ManagedThreadId
更改,因此处理并行发生。