是否有可能停止传播公告传递?

Is it possible to stop propagation of Announcement delivery?

是否有可能以某种方式停止公告传递的传播?

想象一下:

Transcript open.

a := Announcer new.

a when: #event do: [ self logCr: 'first handler' ].
a when: #event do: [ self logCr: 'second handler' ].

a announce: #event.

#event 公布后,将发送给所有订阅者。问题是,我希望其中一个事件停止传播,这样第二个事件就不会收到它。类似于在 JavaScript.

中可以停止事件传播的方式

不幸的是它的实现方式 (SubscriptionRegistry>>handlesAnnouncement:) 它首先收集订阅者然后宣布它。

不,目前在 Pharo 中无法做到这一点。您与 JavaScript 的比较也不太公平,因为 JavaScript 是(有效地)单线程,而 Pharo 不是。当前的公告实施确实在触发它的同一线程中发送公告,因此可能会阻止进一步的发送,但将来实施可能会更改为异步发送公告。那么这道题就会突然变难很多。