如何在不占用资源的情况下连续引发大量事件

本文关键字:连续 事件 情况下 资源 | 更新日期: 2023-09-27 18:30:27

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

目前,我在登录方法的末尾逐个引发事件。这有效,但这意味着如果我在 UserAdd 事件处理程序中执行冗长的操作,库使用者将无法及时获取其事件。

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

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

如何在不占用资源的情况下连续引发大量事件

也许您可能希望将事件处理程序更改为简单地"排队"到线程安全队列工作项中。 然后,您可以有一个线程连续泵送队列以实际处理消息。 这样,提升就会非常快地发生,并且只有一个线程实际处理工作项队列。

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