我有一个集成测试,我通过发送事件来触发事物。然后发生了几个异步事件,我期望通过这个事件引发特定数量的事件。
我的测试代码应该等到这个事件数量增加。我通过对此事件的回调订阅和等待句柄来完成此操作。基本上
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只能计为一个。关于如何使这个线程安全的任何想法或模式? 我考虑过让事件成为一个领域......但是,由于其他原因,这有点不太酷。
答案 0 :(得分:2)
我认为你正在寻找CountdownEvent。
基本上,您使用您期望的事件数初始化CountdownEvent
。然后,当每个事件发生时,代码发出CountdownEvent
信号,该信号将在信号通知预期次数后设置。
这是一个非常方便的事情。绝对检查一下。