Class: Concurrent::ScheduledTask

Inherits:
Object
  • Object
show all
Includes:
Obligation, Observable
Defined in:
lib/concurrent/scheduled_task.rb

Instance Attribute Summary collapse

Attributes included from Obligation

#reason, #state

Instance Method Summary collapse

Methods included from Obligation

#fulfilled?, #pending?, #rejected?, #value

Methods included from Dereferenceable

#set_deref_options, #value

Constructor Details

#initialize(schedule_time, opts = {}, &block) ⇒ ScheduledTask

Returns a new instance of ScheduledTask.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/concurrent/scheduled_task.rb', line 12

def initialize(schedule_time, opts = {}, &block)
  now = Time.now

  if ! block_given?
    raise ArgumentError.new('no block given')
  elsif schedule_time.is_a?(Time)
    if schedule_time <= now
      raise ArgumentError.new('schedule time must be in the future') 
    else
      @schedule_time = schedule_time.dup
    end
  elsif schedule_time.to_f <= 0.0
    raise ArgumentError.new('seconds must be greater than zero')
  else
    @schedule_time = now + schedule_time.to_f
  end

  @state = :pending
  @schedule_time.freeze
  @task = block
  set_deref_options(opts)

  @thread = Thread.new{ work }
  @thread.abort_on_exception = false
end

Instance Attribute Details

#schedule_timeObject (readonly)

Returns the value of attribute schedule_time.



10
11
12
# File 'lib/concurrent/scheduled_task.rb', line 10

def schedule_time
  @schedule_time
end

Instance Method Details

#add_observer(observer, func = :update) ⇒ Object



60
61
62
63
# File 'lib/concurrent/scheduled_task.rb', line 60

def add_observer(observer, func = :update)
  return false unless [:pending, :in_progress].include?(@state)
  super
end

#cancelObject Also known as: stop



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/concurrent/scheduled_task.rb', line 46

def cancel
  return false if mutex.locked?
  return mutex.synchronize do
    if @state == :pending
      @state = :cancelled
      event.set
      true
    else
      false
    end
  end
end

#cancelled?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/concurrent/scheduled_task.rb', line 38

def cancelled?
  return @state == :cancelled
end

#in_progress?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/concurrent/scheduled_task.rb', line 42

def in_progress?
  return @state == :in_progress
end