0

Monitor.Pulse/All并且Monitor.Wait是有用的方法,但是我抱怨说,当大量使用它们时(我有一个 DSL 设计器将它们吐出一打),生成的代码变得不可读。你怎么看?

4

3 回答 3

1

如果它散布在您实际必须阅读的代码上,那可能是个问题。为什么它一开始就经常出现?功能实际上可以封装在其他地方吗?

从根本上说,Wait/Pulse 没有任何问题——但就像生活中的其他一切一样,如果使用不当,它就会成为一个问题。不看代码就很难判断你的使用是否不当:(

于 2008-12-11T17:10:57.407 回答
0

我真的建议不要使用这种方法 - 来自 PulseEvent 的 MSDN 页面:

等待同步对象的线程可以通过内核模式 APC 暂时从等待状态中移除,然后在 APC 完成后返回等待状态。如果对 PulseEvent 的调用发生在线程已从等待状态中移除的时间内,则不会释放线程,因为 PulseEvent 仅释放在调用它时正在等待的那些线程。因此,PulseEvent 不可靠,不应被新应用程序使用。相反,使用条件变量。

现在,Monitor.Pulse 可能使用 PulseEvent 以外的东西编写,但整个概念存在很大缺陷 - 正确使用锁和条件变量。

于 2008-12-11T17:25:21.277 回答
-1

听起来像是应该通过注入作为方面进行编码的东西。但是,我对 C# 中 AOP 支持的了解可以忽略不计,因此我无法提供更多信息。

于 2008-12-11T17:19:15.707 回答