Otto 事件处理顺序
Otto events handling order
如果我要使用 Otto Bus 库,请帮助我确定以下情况是否有效。
- 如果我需要保证订阅者执行的顺序。我有两个正在侦听相同事件类型的组件,是否有 Otto Bus
可以保证component1不断处理事件的能力
在组件 2 之前。我注册他们的订单可以提供给我吗
那个?
根据 Otto 文档
Posting to the bus is a synchronous action so when program execution
continues it is guaranteed that all subscribers have been called.
这是否意味着任何事件订阅者都没有被执行
并行?
谢谢
发布事件时,Otto 遍历 Set
个处理程序以将事件分派给它们。
由于 Set
是一个无序集合,因此不能保证这会按照您注册它们的顺序(或任何特定顺序)发生。
相关部分来自源码:
Set<Class<?>> dispatchTypes = flattenHierarchy(event.getClass());
boolean dispatched = false;
for (Class<?> eventType : dispatchTypes) {
Set<EventHandler> wrappers = getHandlersForEventType(eventType);
if (wrappers != null && !wrappers.isEmpty()) {
dispatched = true;
for (EventHandler wrapper : wrappers) {
enqueueEvent(event, wrapper);
}
}
}
如果我要使用 Otto Bus 库,请帮助我确定以下情况是否有效。
- 如果我需要保证订阅者执行的顺序。我有两个正在侦听相同事件类型的组件,是否有 Otto Bus 可以保证component1不断处理事件的能力 在组件 2 之前。我注册他们的订单可以提供给我吗 那个?
根据 Otto 文档
Posting to the bus is a synchronous action so when program execution continues it is guaranteed that all subscribers have been called.
这是否意味着任何事件订阅者都没有被执行 并行?
谢谢
发布事件时,Otto 遍历 Set
个处理程序以将事件分派给它们。
由于 Set
是一个无序集合,因此不能保证这会按照您注册它们的顺序(或任何特定顺序)发生。
相关部分来自源码:
Set<Class<?>> dispatchTypes = flattenHierarchy(event.getClass());
boolean dispatched = false;
for (Class<?> eventType : dispatchTypes) {
Set<EventHandler> wrappers = getHandlersForEventType(eventType);
if (wrappers != null && !wrappers.isEmpty()) {
dispatched = true;
for (EventHandler wrapper : wrappers) {
enqueueEvent(event, wrapper);
}
}
}