我有一个变量被另一个线程更新,我想在不同的时间检查该变量的不同条件:
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秒,在这种情况下会抛出错误。我知道必须有一些东西可以容纳这个,但它是什么?