0

私はこのようなコードを持っています:

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何か案は?

4

3 に答える 3