lib/performer.rb in performer-1.0.0 vs lib/performer.rb in performer-1.0.1
- old
+ new
@@ -20,10 +20,12 @@
def initialize
@queue = Performer::Queue.new
@running = true
@thread = Thread.new(&method(:run_loop))
+
+ @current_task = nil
@shutdown_task = Task.new(lambda do
@running = false
nil
end)
end
@@ -78,32 +80,30 @@
private
def run_loop
while @running
- open = @queue.deq do |task|
- begin
- task.call
- rescue Performer::Task::Error
- # No op. Allows cancelling scheduled tasks.
- end
- end
+ open = @queue.deq { |task| with_task(task, &:call) }
if not open and @queue.empty?
@running = false
end
end
ensure
@queue.close
until @queue.empty?
- @queue.deq do |task|
- begin
- task.cancel
- rescue Performer::Task::Error
- # Shutting down. Don't care.
- end
- end
+ @queue.deq { |task| with_task(task, &:cancel) }
end
+ end
+
+ def with_task(task)
+ @current_task = task
+ yield task
+ rescue Performer::Task::Error
+ # Performer calling task does not care if you cancelled
+ # task, or if you called task earlier. We skip it.
+ ensure
+ @current_task = nil
end
end
require "performer/condition_variable"
require "performer/queue"