Class: Concurrent::ScheduledTask

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

Constant Summary collapse

SchedulingError =
Class.new(ArgumentError)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Obligation

#completed?, #fulfilled?, #incomplete?, #pending?, #reason, #rejected?, #state, #unscheduled?, #value

Methods included from Dereferenceable

#init_mutex, #mutex, #set_deref_options, #value

Constructor Details

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

Returns a new instance of ScheduledTask.

Raises:



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/concurrent/scheduled_task.rb', line 14

def initialize(schedule_time, opts = {}, &block)
  raise SchedulingError.new('no block given') unless block_given?
  calculate_schedule_time!(schedule_time) # raise exception if in past

  init_obligation
  @observers = CopyOnWriteObserverSet.new
  @state = :unscheduled
  @intended_schedule_time = schedule_time
  @schedule_time = nil
  @task = block
  set_deref_options(opts)
end

Instance Attribute Details

#schedule_timeObject (readonly)

Returns the value of attribute schedule_time.



12
13
14
# File 'lib/concurrent/scheduled_task.rb', line 12

def schedule_time
  @schedule_time
end

Class Method Details

.execute(schedule_time, opts = {}, &block) ⇒ Object

Since:

  • 0.5.0



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

def self.execute(schedule_time, opts = {}, &block)
  return ScheduledTask.new(schedule_time, opts, &block).execute
end

Instance Method Details

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



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

def add_observer(observer, func = :update)
  if_state(:unscheduled, :pending, :in_progress) do
    @observers.add_observer(observer, func)
  end
end

#cancelObject Also known as: stop



49
50
51
52
53
54
55
# File 'lib/concurrent/scheduled_task.rb', line 49

def cancel
  if_state(:unscheduled, :pending) do
    @state = :cancelled
    event.set
    true
  end
end

#cancelled?Boolean

Returns:

  • (Boolean)


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

def cancelled?
  state == :cancelled
end

#executeObject

Since:

  • 0.5.0



28
29
30
31
32
33
34
# File 'lib/concurrent/scheduled_task.rb', line 28

def execute
  if compare_and_set_state(:pending, :unscheduled)
    @schedule_time = calculate_schedule_time!(@intended_schedule_time).freeze
    Thread.new { work }
    self
  end
end

#in_progress?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/concurrent/scheduled_task.rb', line 45

def in_progress?
  state == :in_progress
end