我想创建一些以通用方式使用的
方法,是否会阻止(除非某个超时到期),直到满足给定的条件.
代码中的用法将类似于:
WaitUntil( condition );
我已经尝试使用While(..)循环来实现它,但是这似乎是一种浪费.
在当前的实现中,我正在初始化“一次性”计时器,该计时器在TIMEOUT过期.我正在运行一段时间的循环,并检查计时器是否超时,如果有的话会抛出异常.
有没有简单而有效的技术来实现这种方法?
阻止一个条件可以工作(我倾向于使用监视器为该人),但是,在大多数情况下,我建议在这里更异步的编码,意思是:而不是等待,你
注册某种回调发生在条件发生.这可能是通过一个事件,或最近一个有继续的任务(ContinueWith).在c#5中,这进一步扩展了“等待”比喻,使这个透明化,即.
var foo = StartSomeWork();
...
var result = await foo;
Console.WriteLine(result);
这看起来像在“等待”一样阻塞 – 但实际上恰恰相反(假设任务尚未完成);这将注册在数据可用时调用的延续,最有可能在不同的线程上.