イベントを送信して物事をトリガーする統合テストがあります。その後、いくつかの非同期処理が発生し、これによって特定の数のイベントが発生することが予想されます。
テスト コードは、この数のイベントが発生するまで待機します。このイベントへのコールバック サブスクリプションと待機ハンドルを使用してこれを行いました。基本的
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 をフィールドにすることも考えましたが、まあ、それは別の理由でちょっとクールではありません。