C# · 12月 29, 2021

c# – 直到满足某些条件才能“阻止”的最佳方法

我想创建一些以通用方式使用的方法,是否会阻止(除非某个超时到期),直到满足给定的条件.

代码中的用法将类似于:

WaitUntil( condition );

我已经尝试使用While(..)循环来实现它,但是这似乎是一种浪费.

在当前的实现中,我正在初始化“一次性”计时器,该计时器在TIMEOUT过期.我正在运行一段时间的循环,并检查计时器是否超时,如果有的话会抛出异常.

有没有简单而有效的技术来实现这种方法?

解决方法 阻止一个条件可以工作(我倾向于使用监视器为该人),但是,在大多数情况下,我建议在这里更异步的编码,意思是:而不是等待,你注册某种回调发生在条件发生.这可能是通过一个事件,或最近一个有继续的任务(ContinueWith).在c#5中,这进一步扩展了“等待”比喻,使这个透明化,即. var foo = StartSomeWork();…var result = await foo;Console.WriteLine(result);

这看起来像在“等待”一样阻塞 – 但实际上恰恰相反(假设任务尚未完成);这将注册在数据可用时调用的延续,最有可能在不同的线程上.