条件事件等待 / ManualResetEvent

3

我知道如何使用ManualResetEvent或同步原语(如Monitor)等待事件和/或锁定,但我想知道是否有一种方法可以实现以下内容:

ManualResetEvent resetEvent; 

public string WaitForOneThousandMs()
{
    resetEvent.Wait(1000);

    if (WaitTime(resetEvent) <= 1000)
        return "Event occured within 1000ms."; 
    else
        return "Event did not occur within 1000ms."; 
}

1)等待1000毫秒以触发事件X。

2)如果事件在1000毫秒内发生,则执行路径A。

3)否则,执行路径B。

这基本上是一个有条件的等待函数,其中条件是我们需要等待多长时间。如何实现最佳?

1个回答

5

看起来您需要:

return resetEvent.WaitOne(1000) ? "Event occurred within 1000ms"
                                : "Event did not occur within 1000ms";

来自WaitHandle.WaitOne的文档:

返回值
如果当前实例收到信号,则为true;否则为false

Monitor.Wait以类似的方式返回一个bool


快速跟进问题:如果在WaitOne()方法开始等待之前就调用ManualResetEvent上的Set()方法,那么WaitOne()方法会立即返回true吗? - Sean Thoman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接