在继续之前等待一些事件(线程安全)

时间:2013-03-14 14:40:06

标签: c# multithreading events

我有一个集成测试,我通过发送事件来触发事物。然后发生了几个异步事件,我期望通过这个事件引发特定数量的事件。

我的测试代码应该等到这个事件数量增加。我通过对此事件的回调订阅和等待句柄来完成此操作。基本上

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 个答案:

答案 0 :(得分:2)

我认为你正在寻找CountdownEvent

基本上,您使用您期望的事件数初始化CountdownEvent。然后,当每个事件发生时,代码发出CountdownEvent信号,该信号将在信号通知预期次数后设置。

这是一个非常方便的事情。绝对检查一下。