4

AutoResetEventの適切な設計の範囲外になっている可能性がありますが、何を使用すればよいかよくわかりません。私はこの振る舞いが欲しい:

var autoResetEvent = new AutoResetEvent(false);
autoResetEvent.Set();
autoResetEvent.Set();
autoResetEvent.WaitOne();
// since Set was called twice, I don't want to wait here
autoResetEvent.WaitOne();

残念ながら(私の問題では)、これはAutoResetEventの動作ではありません。この状況で使用するのに最適なクラスは何ですか?

注:.NETParallelExensionsライブラリにアクセスできます。

4

2 に答える 2

6

セマフォをお探しですか?

于 2010-11-10T19:05:08.527 に答える
0

Parallel Extensions Libraryを使用できる場合は、代わりにそれを使用する必要があります。ワーカータスクを呼び出して、実行が完了するのを待つのは簡単です。

var task = Task.Factory.StartNew(() => {
    Thread.Sleep(1000);
    Console.WriteLine("I'm Awake!");
});

Console.WriteLine("Waiting on task...");

task.Wait();

これにより、次の出力が生成されます。

タスクを待っています...
私は起きています!

TPLを含む.Netでのスレッド化の詳細については、次の優れたリソースを確認してください:http: //www.albahari.com/threading/

于 2010-11-10T19:18:32.023 に答える