My Parallel.ForEachループでは、localFinallyデリゲートがすべてのスレッドで呼び出されます。パラレルループが停止すると、これが発生することがわかりました。私の並列ループには、ループが完了する前に戻る約3つの条件チェックステージがあります。そして、localFinallyデリゲートを実行しないのは、スレッドがこれらのステージから返され、本体全体の実行ではない場合のようです。
ループ構造は次のとおりです。
var startingThread = Thread.CurrentThread;
Parallel.ForEach(fullList, opt,
()=> new MultipleValues(),
(item, loopState, index, loop) =>
{
if (cond 1)
return loop;
if (cond 2)
{
process(item);
return loop;
}
if (cond 3)
return loop;
Do Work(item);
return loop;
},
partial =>
{
Log State of startingThread and threads
} );
小さなデータセットでループを実行し、詳細にログに記録したところ、Parallel.ForEachがすべての反復を完了し、localFinallyの最後のスレッドのログが次のようになっていることがわかりまし
た。ループはまだ正常に完了せず、ストールしたままです...ストールする理由の手がかりはありますか?
乾杯!