【问题标题】:How to raise a large number of events consecutively without being a resource hog如何在不占用资源的情况下连续引发大量事件
【发布时间】:2012-04-10 00:43:40
【问题描述】:

我正在开发一个 Messenger 库。主类有一个 Login 方法。登录时,会下载并存储所有联系人列表数据,直到登录完成,此时我为每个下载的用户引发 UserAdded 事件。

目前,我在 Login 方法的末尾一一提出事件。这可行,但这意味着如果我在 UserAdded 事件处理程序中执行冗长的操作,库使用者不会及时获取他们的事件。

我可以看到解决此问题的一种方法是异步引发每个事件,但这会破坏线程池。

我目前的做法是否正确?我是否应该简单地在文档中写下关于在事件处理程序中执行冗长操作的警告?

【问题讨论】:

    标签: c# events messenger


    【解决方案1】:

    也许您可能希望将事件处理程序更改为简单地“入队”到线程安全队列工作项中。然后,您可以有一个单独的线程来不断地泵送队列以实际处理消息。这样一来,提升发生得非常快,并且只有一个线程实际处理工作项队列。

    但是,这样做意味着您现在必须处理一个事实,即引发事件并不意味着它已被立即处理,这可能会影响您在应用中的逻辑。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多