【发布时间】:2017-02-17 08:32:56
【问题描述】:
我有这段代码在单线程中运行良好
foreach (var meetingRoom in meetingRooms)
{
try
{
var res = calendarService.GetEvents(meetingRoom.Email, startUtc, endUtc, lightweight, limit);
result.AddRange(res);
}
catch (Exception ex)
{
Log.Error(ex);
}
}
但问题是 meetingRooms 列表包含超过 40 000 个条目。我正在尝试接近 Parallel.Foreach - 这是我到目前为止所得到的:
Parallel.ForEach(meetingRooms, () => 0,(meetingRoom) =>
{
var res = calendarService.GetEvents(meetingRoom.Email, startUtc, endUtc, lightweight, limit);
}
,
finalResult =>
{
lock (result)
{
result.Add(finalResult);
}
});
我不知道第四个参数 localFinally 是如何工作的。
请注意,result 和 meetingRooms 是具有不同数据类型的列表。
编辑:
正如其中一个答案所示,我已经实施了 PLINQ 解决方案。看起来像它的工作,但 Exchange Web 服务(EWS)库没有实现并行调用其方法之一。获取和错误“不是唯一的键!”这是由 Microsoft 代码抛出的。
【问题讨论】:
-
这里没有真正的问题-我没有看到“localFinally”的pramater ..具体是什么问题
-
这是在什么背景下? ASP.NET、控制台、WPF、Windows 窗体?
-
样本在
result.Add()和result.AddRange()的使用上是不一致的,最好解决这个问题。
标签: c# multithreading parallel.foreach