@@ -59,7 +59,7 @@ public struct EffectRouter<Effect, Event> {
5959 public func routeEffects< EffectParameters> (
6060 withParameters extractParameters: @escaping ( Effect ) -> EffectParameters ?
6161 ) -> _PartialEffectRouter < Effect , EffectParameters , Event > {
62- return _PartialEffectRouter ( routes: routes, path: extractParameters, queue: nil )
62+ return _PartialEffectRouter ( routes: routes, path: extractParameters, queue: nil , receiveQueue : nil )
6363 }
6464
6565 /// Convert this `EffectRouter` into `Connectable` which can be attached to a Mobius Loop, or called on its own to
@@ -77,14 +77,15 @@ public struct _PartialEffectRouter<Effect, EffectParameters, Event> {
7777 fileprivate let routes : [ Route < Effect , Event > ]
7878 fileprivate let path : ( Effect ) -> EffectParameters ?
7979 fileprivate let queue : DispatchQueue ?
80+ fileprivate let receiveQueue : DispatchQueue ?
8081
8182 /// Route to an `EffectHandler`.
8283 ///
8384 /// - Parameter effectHandler: the `EffectHandler` for the route in question.
8485 public func to< Handler: EffectHandler > (
8586 _ effectHandler: Handler
8687 ) -> EffectRouter < Effect , Event > where Handler. EffectParameters == EffectParameters , Handler. Event == Event {
87- let connectable = EffectExecutor ( handleInput: effectHandler. handle)
88+ let connectable = EffectExecutor ( handleInput: effectHandler. handle, outputQueue : receiveQueue )
8889 let route = Route < Effect , Event > ( extractParameters: path, connectable: connectable, queue: queue)
8990 return EffectRouter ( routes: routes + [ route] )
9091 }
@@ -100,7 +101,7 @@ public struct _PartialEffectRouter<Effect, EffectParameters, Event> {
100101 return EffectRouter ( routes: routes + [ route] )
101102 }
102103
103- /// Handle an the current `Effect` asynchronously on the provided `DispatchQueue`
104+ /// Handle the current `Effect` asynchronously on the provided `DispatchQueue`
104105 ///
105106 /// Warning: Dispatching events to a loop from a different queue is not a thread-safe operation and will require
106107 /// manual synchronization unless the loop is run in a `MobiusController`.
@@ -109,7 +110,14 @@ public struct _PartialEffectRouter<Effect, EffectParameters, Event> {
109110 ///
110111 /// - Parameter queue: The `DispatchQueue` that the current `Effect` should be handled on.
111112 public func on( queue: DispatchQueue ) -> Self {
112- return Self ( routes: routes, path: path, queue: queue)
113+ return Self ( routes: routes, path: path, queue: queue, receiveQueue: receiveQueue)
114+ }
115+
116+ /// Receive an `Event` asynchronously on the provided `DispatchQueue`
117+ ///
118+ /// - Parameter queue: The `DispatchQueue` that any `Event` should be received on.
119+ public func receiveOn( queue receiveQueue: DispatchQueue ) -> Self {
120+ return Self ( routes: routes, path: path, queue: queue, receiveQueue: receiveQueue)
113121 }
114122}
115123
0 commit comments