Monitor.Pulse/All
和Monitor.Wait
是有用的方法,但是我抱怨大量使用它们(我有一个DSL设计师将它们吐出来),结果代码变为不可读。你觉得怎么样?
答案 0 :(得分:1)
如果它遍及您实际必须阅读的所有代码,那可能是个问题。为什么它首先经常出现?功能是否可以实际封装在其他地方?
从根本上说,等待/脉冲没有任何问题 - 但与生活中的其他一切一样,如果使用不当,它将成为一个问题。如果没有看到代码,很难判断您的使用是否合适:(
答案 1 :(得分:0)
我真的建议反对这种方法 - 来自PulseEvent上的MSDN页面:
等待同步对象的线程可以通过内核模式APC暂时从等待状态中删除,然后在APC完成后返回到等待状态。如果在线程从等待状态中删除期间发生对PulseEvent的调用,则不会释放该线程,因为PulseEvent仅释放那些在被调用时正在等待的线程。因此, PulseEvent不可靠,不应被新应用程序使用。相反,使用条件变量。
现在,Monitor.Pulse可能是使用PulseEvent以外的东西编写的,但整个概念都有很大的缺陷 - 正确使用锁和条件变量。
答案 2 :(得分:-1)
听起来应该通过注射作为一个方面进行编码。但是,我对C#中AOP支持的了解可以忽略不计,所以我不能提供更多。