Class: Concurrent::WrappingExecutor

Inherits:
Synchronization::Object
  • Object
show all
Includes:
ExecutorService
Defined in:
lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb

Overview

A delegating executor which modifies each task with arguments before the task is given to the target executor it delegates to.

Examples:

Count task executions

counter          = AtomicFixnum.new
count_executions = WrappingExecutor.new Concurrent.global_io_executor do |*args, &task|
  [*args, -> *args { counter.increment; task.call *args }]
end
10.times { count_executions.post { :do_something } }
sleep 0.01
counter.value #=> 10

Instance Method Summary collapse

Constructor Details

#initialize(executor) {|*args, &task| ... } ⇒ WrappingExecutor

Returns a new instance of WrappingExecutor.

Parameters:

  • executor (Executor)

    an executor to delegate the tasks to

Yields:

  • (*args, &task)

    A function which can modify the task with arguments

Yield Parameters:

  • *args (Array<Object>)

    the arguments submitted with the tasks

  • &task (block)

    the task submitted to the executor to be modified

Yield Returns:

  • (Array<Object>)

    a new arguments and task ‘[*args, task]` which are submitted to the target executor



26
27
28
29
30
# File 'lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb', line 26

def initialize(executor, &wrapper)
  super()
  @Wrapper  = wrapper
  @Executor = executor
end

Instance Method Details

#can_overflow?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb', line 41

def can_overflow?
  @Executor.can_overflow?
end

#post(*args, &task) ⇒ Object



35
36
37
38
# File 'lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb', line 35

def post(*args, &task)
  *args, task = @Wrapper.call(*args, &task)
  @Executor.post(*args, &task)
end

#serialized?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb', line 46

def serialized?
  @Executor.serialized?
end