私はシングルスレッドコールParallel.Foreachにおける方法およびスレッドセーフリストに結果を保存
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にアプローチしようとしています - これはI'veがこれまでに得たものである:
Parallel.ForEach(meetingRooms,() => 0,(meetingRoom) =>
{
var res = calendarService.GetEvents(meetingRoom.Email, startUtc, endUtc, lightweight, limit);
}
,
finalResult =>
{
lock (result)
{
result.Add(finalResult);
}
});
私は第四パラメータlocalFinallyがどのように動作するかを理解して運を持っていません。
resultおよびmeetingRoomsは、異なるデータ型のリストです。
EDIT:回答の一つが示すよう
I'veはPLINQソリューションを実装しました。動作しているようですが、Exchange Webサービス(EWS)ライブラリは、そのメソッドの1つを並列呼び出しするために実装されていません。取得とエラー "ユニークなキーではありません!"マイクロソフトのコードによってスローされます。
本当にここでは問題はありません - 私は "localFinally"のpaterを見ません..特に問題は何ですか – BugFinder
これはどんなコンテキストですか? ASP.NET、コンソール、WPF、Windowsフォーム? –
サンプルは 'result.Add()'と 'result.AddRange()'の使用に一貫性があります。 –