Class: DispatchQueue::Continuation

Inherits:
Object
  • Object
show all
Defined in:
lib/dispatch_queue_rb/internal/continuation.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target_queue: nil, group: nil, barrier: false, eta: nil, &task) ⇒ Continuation



15
16
17
18
19
20
21
# File 'lib/dispatch_queue_rb/internal/continuation.rb', line 15

def initialize( target_queue:nil, group:nil, barrier:false, eta:nil, &task )
  @task = task
  @target_queue = target_queue
  @group = group
  @barrier = barrier
  @eta = eta
end

Instance Attribute Details

#barrierObject (readonly)

Returns the value of attribute barrier.



12
13
14
# File 'lib/dispatch_queue_rb/internal/continuation.rb', line 12

def barrier
  @barrier
end

#etaObject (readonly)

Returns the value of attribute eta.



13
14
15
# File 'lib/dispatch_queue_rb/internal/continuation.rb', line 13

def eta
  @eta
end

Instance Method Details

#run(default_target_queue: nil, override_target_queue: nil) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/dispatch_queue_rb/internal/continuation.rb', line 23

def run( default_target_queue:nil, override_target_queue:nil )
  queue = override_target_queue || @target_queue || default_target_queue
  if queue
    if @barrier
      queue.dispatch_barrier_async( group:@group, &@task )
    else
      queue.dispatch_async( group:@group, &@task )
    end
    @group.leave() if @group
  else
    begin
      @task.call() if @task
    ensure
      @group.leave() if @group
    end
  end
end