私は、いくつかの作業を行うためにいくつかのスレッドを生成するクラスを持っています。イベントが発生した場合に作業を停止する機能が必要です。イベント ハンドラーは、生成されたクラス say(Interrupted) にフィールドを設定します。For-Each のデリゲートでは、次の反復に進む前にこのフラグをチェックしています。
public bool Interrupted { get; set; }
Parallel.ForEach(some collection){
if (Interrupted)
{
parallelLoopState.Break();
return;
}
else
DoSomething();
}
親スレッドで Interrupted が true に設定されるようになりました。Parallel.Foreach によって生成されたスレッドにすぐに表示されますか? それとも、可視性が得られるまでに時間がかかりますか?
私のテストは断続的に失敗し、親スレッドがフラグを設定した後でも、子スレッドが数回実行されたことを示唆していますか? 基本的なものが欠けていますか?
これは Volatile のユース ケース シナリオですか?