Class: Concurrent::ScheduledTask
- Inherits:
-
Object
- Object
- Concurrent::ScheduledTask
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
#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_time ⇒ Object
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
|
#cancel ⇒ Object
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
38
39
40
|
# File 'lib/concurrent/scheduled_task.rb', line 38
def cancelled?
return @state == :cancelled
end
|
#in_progress? ⇒ Boolean
42
43
44
|
# File 'lib/concurrent/scheduled_task.rb', line 42
def in_progress?
return @state == :in_progress
end
|