module Concurrent::Actor

{include:file:doc/actor/main.md} @api Actor @!macro edge_warning

Constants

Error

Public Class Methods

current() click to toggle source

@return [Reference, nil] current executing actor if any

# File lib/concurrent/actor.rb, line 33
def self.current
  Thread.current[:__current_actor__]
end
root() click to toggle source

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
spawn(*args, &block) click to toggle source

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
spawn!(*args, &block) click to toggle source

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
to_spawn_options(*args) click to toggle source

@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