0

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

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

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

我目前的做法是否正确?我是否应该在文档中简单地做一个注释,警告不要在事件处理程序中执行冗长的操作?

4

1 回答 1

1

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

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

于 2012-04-10T00:50:52.963 回答