C#通用等待方法

时间:2014-01-24 03:08:24

标签: c# lambda delegates timeout predicate

我有一个变量被另一个线程更新,我想在不同的时间检查该变量的不同条件:

int x; //being modified by a thread


//some conditions I may want to check
x == 4

x < 0

x % 2 == 0
等等,只是布尔。我想创建一个泛型方法,我可以传递一个返回bool的lambda函数,以及等待该条件发生的超时:

void WaitForEvent(lambda f, int timeOut)
{
    var t0 = DateTime.Now();
    while(true)
    {
        if(f)
            break;
        if((DateTime.Now() - t0).TotalSeconds > timeOut)
            throw new Exception("Timed out waiting for condition!");
        Thread.Sleep(100);
    }
}

该方法将使用如下:

WaitForEvent(()=> x > 5, 3);

调用将阻塞,直到x变得大于5或经过3秒,在这种情况下会抛出错误。我知道必须有一些东西可以容纳这个,但它是什么?

0 个答案:

没有答案