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 只能数到一。关于如何使这个线程安全的任何想法或模式?我想过让 eventsCaptured 成为一个领域......但是,由于其他原因,这有点不酷。

4

1 回答 1

2

我认为您正在寻找CountdownEvent

基本上,您使用CountdownEvent您期望的事件数来初始化 a 。然后,随着每个事件的发生,代码会发出 信号CountdownEvent,在发出预期次数的信号后,它将被设置。

这是一件很方便的事情。一定要检查一下。

于 2013-03-14T17:22:03.333 回答