建议的做法是异步引发所有事件,如果

时间:2010-06-10 19:38:51

标签: c# events

如果类(事件引发对象)对客户端对象(事件的接收者)如何操纵事件的参数不感兴趣,建议的做法是异步引发所有事件吗?!

请指导我?

4 个答案:

答案 0 :(得分:5)

不,这不是推荐的练习。

您必须考虑其他因素,例如:

  • 创建类的线程亲和力要求。
  • 是否涉及UI元素(线程关联性的变体)
  • 响应事件的类是否可以接受多个线程上的并发处理(也就是说它们线程安全)。
  • 是否涉及线程本地数据(例如Thread.CurrentPrincipal,HttpContext等)
  • 您是否从多线程处理中获益。

多线程使事情变得复杂。异步事件处理需要多线程处理。你应该只在它为你买东西时引入复杂性(例如改进的性能,更敏感的用户交互,简化其他更复杂的东西)。

如果不了解具体情况的详细信息,则无法建议异步事件是否合适。但是所有事情都是平等的 - 除非我有充分的理由,否则我会避免异步事件。

答案 1 :(得分:1)

不,不是。事实上,异步提升事件可能会在您的程序中引入一系列新问题。除非你有令人信服的理由,否则你不应该这样做。

答案 2 :(得分:0)

不,不建议练习。所有常见的警告都适用于您需要确保不会发生死锁和竞争。

缺点是,如果所有事件都可以异步调用,那就太棒了,但是你必须对任何多线程代码库都采取同样的谨慎态度。

答案 3 :(得分:0)

除了LBushkin的好答案之外,我想补充一些东西。

这种方法的另一个问题是,您将采用已建立的模式(事件),并且基本上没有警告用户更改函数的方式。这是混淆用户和在应用程序中创建错误的方法。

是的,你可以说人们应该阅读文档。但是真的是谁会阅读标准.Net事件的文档,看看它是否像.Net框架中的几乎所有其他事件一样被触发。答案不是太多人。

除非有非常令人信服的理由,否则打破既定模式通常是一个坏主意。