Class: Concurrent::ScheduledTask
- Inherits:
-
Object
- Object
- Concurrent::ScheduledTask
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
#init_mutex, #mutex, #set_deref_options, #value
Constructor Details
#initialize(schedule_time, opts = {}, &block) ⇒ ScheduledTask
Returns a new instance of ScheduledTask.
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)
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_time ⇒ Object
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
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
|
#cancel ⇒ Object
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
41
42
43
|
# File 'lib/concurrent/scheduled_task.rb', line 41
def cancelled?
state == :cancelled
end
|
#execute ⇒ Object
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
45
46
47
|
# File 'lib/concurrent/scheduled_task.rb', line 45
def in_progress?
state == :in_progress
end
|