目前,我正在使用以下伪代码:
List<MyMail> m = new List<MyMail>();
foreach(var user in users) {
var mails = mailLibrary.getAllMails(user); // synchronously; 100ms waiting time
foreach(var mail in mails) m.add(mail);
}
return m.ToArray();
现在我想并行获取所有用户的邮件,因为mailLibrary是同步编写的,并且涉及多个邮件服务器。 尽管如此,列表应该按照以前的方式进行排序。所以我会尝试
List<MyMail> m = new List<MyMail>();
Parallel.ForEach(users,user => {
List<MyMail> innerM = new List<MyMail>();
var mails = mailLibrary.getAllMails(user); // synchronously; 100ms waiting time
foreach(var mail in mails) innerM.add(mail);
// How to zip innerM list content into m such that content is at the correct position?
});
return m.ToArray();
如何将innerM
压缩到m
的正确位置?
答案 0 :(得分:4)
您是否考虑过使用Parallel LINQ?
return users.AsParallel().AsOrdered()
.SelectMany(user => mailLibrary.getAllMails(user))
.ToArray();
根据{{3}},我相信在保持所有排序方面会做正确的事。