0

イベントを送信して物事をトリガーする統合テストがあります。その後、いくつかの非同期処理が発生し、これによって特定の数のイベントが発生することが予想されます。

テスト コードは、この数のイベントが発生するまで待機します。このイベントへのコールバック サブスクリプションと待機ハンドルを使用してこれを行いました。基本的

private AutoResetEvent thingsChangedEventOccurred = new AutoResetEvent(false);

private void OnThingsChangedEventOccurred(ThingsChangedEventData thingsChangedEventData)
{
this.thingsChangedEventOccurred.Set();
}

private void WaitForThisNumberOfThingsChangedEvents(int numberOfEventsToWaitFor)
{
    for (int eventsCaptured = 0; eventsCaptured < numberOfEventsToWaitFor; eventsCaptured++)
    {
        Assert.IsTrue(this.thingsChangedEventOccurred.WaitOne(60000));
    }
}

そして、物事を開始するイベントを送信した後のどこかで、WaitFor.. メソッドを呼び出します。この実装にはスレッド化に関する問題があることに気付きました。AutoResetEvent は 1 つしか数えられないと思います。このスレッドを安全にする方法に関するアイデアやパターンはありますか? eventsCaptured をフィールドにすることも考えましたが、まあ、それは別の理由でちょっとクールではありません。

4

1 に答える 1

2

CountdownEventを探していると思います。

基本的に、CountdownEvent期待するイベント数で a を初期化します。次に、各イベントが発生するたびに、コードは にシグナルを送信しますCountdownEvent。これは、予想される回数だけシグナルが送信された後に設定されます。

それはかなり便利なことです。必ずチェックしてください。

于 2013-03-14T17:22:03.333 に答える