Sync actor
Rocket.sync — Functionsync(actor::A; withlock::Bool = true, timeout::Int = -1) where A
sync(factory::F; withlock::Bool = true, timeout::Int = -1) where { F <: AbstractActorFactory }Creation operator for the SyncActor actor. Accepts optional named timeout argument which specifies maximum number of milliseconds to wait (throws SyncActorTimedOutException() on timeout). Also accepts optional withlock boolean flag indicating that every next!, error! and complete! event should be guarded with ReentrantLock.
Examples
using Rocket
actor = keep(Int)
synced = sync(actor)
subscribe!(from(0:5, scheduler = AsyncScheduler()), synced)
yield()
wait(synced)
show(synced.actor.values)
# output
[0, 1, 2, 3, 4, 5]Can also be used with an <: AbstractActorFactory as an argument. In this case sync function will return a special actor factory object, which will store all created actors in array and wrap them with a sync function. wait(sync_factory) method will wait for all of the created actors to be completed in the order of creation (but only once for each of them).
using Rocket
values = Int[]
factory = lambda(on_next = (d) -> push!(values, d))
synced = sync(factory)
subscribe!(from(0:5, scheduler = AsyncScheduler()), synced)
yield()
wait(synced)
show(values)
# output
[0, 1, 2, 3, 4, 5]See also: SyncActor, AbstractActor
Rocket.SyncActor — TypeSyncActor{T, A}(actor::A; withlock::Bool = true, timeout::Int = -1) where { T, A }Sync actor provides a synchronized interface to wait for an actor to be notified with a complete event. By default creates a re-entrant lock for synchronizing next!, error! and complete! events.