module Concurrent::Actor
{include:file:doc/actor/main.md} @api Actor @!macro edge_warning
Constants
- Error
Public Class Methods
@return [Reference, nil] current executing actor if any
# File lib/concurrent/actor.rb, line 33 def self.current Thread.current[:__current_actor__] end
A root actor, a default parent of all actors spawned outside an actor
# File lib/concurrent/actor.rb, line 44 def self.root @root.value! end
Spawns a new actor. {Concurrent::Actor::AbstractContext.spawn} allows to omit class parameter. To see the list of available options see {Core#initialize} @see Concurrent::Actor::AbstractContext.spawn @see Core#initialize @example by class and name
Actor.spawn(AdHoc, :ping1) { -> message { message } }
@example by option hash
inc2 = Actor.spawn(class: AdHoc, name: 'increment by 2', args: [2], executor: Concurrent.global_io_executor) do |increment_by| lambda { |number| number + increment_by } end inc2.ask!(2) # => 4
@param block for context_class instantiation @param args see {.to_spawn_options} @return [Reference] never the actual actor
# File lib/concurrent/actor.rb, line 67 def self.spawn(*args, &block) if Actor.current Core.new(to_spawn_options(*args).merge(parent: Actor.current), &block).reference else root.ask([:spawn, to_spawn_options(*args), block]).value! end end
as {.spawn} but it'll block until actor is initialized or it'll raise exception on error
# File lib/concurrent/actor.rb, line 76 def self.spawn!(*args, &block) spawn(to_spawn_options(*args).merge(initialized: future = Concurrent.future), &block).tap { future.wait! } end
@overload ::to_spawn_options(context_class, name, *args)
@param [AbstractContext] context_class to be spawned @param [String, Symbol] name of the instance, it's used to generate the {Core#path} of the actor @param args for context_class instantiation
@overload ::to_spawn_options(opts)
see {Core#initialize} opts
# File lib/concurrent/actor.rb, line 87 def self.to_spawn_options(*args) if args.size == 1 && args.first.is_a?(::Hash) args.first else { class: args[0], name: args[1], args: args[2..-1] } end end