私はこのようなコードを持っています:
if (condition#1) {
// step 2
ConfigurazioneSA csa = new ConfigurazioneSA(...);
WconfiguraSA.RunWorkerAsync(csa);
}
else
{
// step 1
PassaggioIE bo = new PassaggioIE(...);
WpassIE.RunWorkerAsync(bo);
if (condition#2) {
// step 2
ConfigurazioneSA csa = new ConfigurazioneSA(...);
WconfiguraSA.RunWorkerAsync(csa);
}
}
実行フローがcondition#1
ブランチ内にある場合、step 1
ブロックは以前に (アプリケーションの以前の実行で) 実行されているためstep 2
、問題なく実行できます。
ただし、実行フローがelse
ブランチ内にある場合は実行する必要がstep 1
あり、このステップが完了すると実行できstep 2
ます。BackgroundWorker
ステップ1起動で使っているのでstep 2
、エラー発生直後に起動します。
この生産者/消費者の問題を同期化して、エントロピーをできるだけ少なくします。私が見つけたすべてのソリューションは大量のコードを導入していますが、完了しないstep 2
まで実行を回避する単純なセマフォを使用していました。step 1
何か案は?