我有一个集成测试,我通过发送一个事件来触发事情。然后发生了一些异步事件,我希望由此引发特定数量的事件。
我的测试代码将等到这个数量的事件被引发。我通过对此事件的回调订阅和等待句柄来做到这一点。基本上
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 成为一个领域......但是,由于其他原因,这有点不酷。