如何确保以正确的顺序调用我的AutoResetEvent方法?

时间:2014-11-18 19:45:53

标签: c# timer autoresetevent

我有一些需要运行Timer的代码。定时器检查条件,并根据结果向呼叫者发出可以继续的信号。这是我的伪代码:

class MyClass
{
    private AutoResetEvent _reset;
    private System.Threading.Timer _timer;

    public void Run()
    {
        this._reset = new AutoResetEvent(false);
        this._timer = new System.Threading.Timer(this.TimerStep, null, 0, 1000);

        this._reset.WaitOne(); //wait for condition() to be true

        this._reset.Dispose();
        this._timer.Dispose();
    }

    private void TimerStep(object arg)
    {
        if(condition())
        {
            this._reset.Set(); //should happen after the _reset.WaitOne() call
        }
    }
}

我的担心与我如何实例化Timer有关。如果我以0 dueTime启动它,则注释表示计时器将立即启动。如果调用线程被定时器抢占并且this._reset.Set()调用在调用线程有机会调用this._reset.WaitOne()之前发生,会发生什么?这是我要担心的事吗?到目前为止,在我的测试中,代码就像我期待的那样。

请注意,我以这种方式设置代码,因为我想阻止Run()函数,直到condition()为真,但我只想每隔一秒左右检查condition()

0 个答案:

没有答案