DefaultActionDispatcher
public class DefaultActionDispatcher : ActionDispatcher
The default dispatcher implementation that provides the ability to observe when actions are performed, across sessions.
This will attempt to detect if the caller is on the queue the action expects, and avoid crashing with a DispatchQueue.sync
call when already on that queue. If the current queue is not the action’s queue, it will use a DispatchQueue.sync
.
The goal is that if the app is on the main queue, call perform
and the dispatcher than finds the action expects
the main
queue, that no queue or async thread hops occur. This prevents a slushy
UI that is always updating
asynchronously, and means the caller does not have to worry about the queue they are on, and nor does the Action
.
However, it is important to note that this mechanism (using setSpecific/getSpecific) will not currently work if the Action’s
queue uses a target
queue.
-
Undocumented
Declaration
Swift
public init()
-
Add an observer that will get notified about action start and end events.
Note
You can call this from any threadDeclaration
Swift
public func add(observer: ActionDispatchObserver)
-
Perform the action, and track whether or not it was already completed by the time it returns, so whether sync or async, we know if
completion
should be called at some future point, so we can warn about this and maybe have a timeout in debug to catch occasions where this does not happen.Declaration
Swift
public func perform<FeatureType, ActionType>(request: ActionRequest<FeatureType, ActionType>, completion: Action.Completion) -> Action.Completion.Status