lib/async/task.rb in async-1.16.0 vs lib/async/task.rb in async-1.17.0
- old
+ new
@@ -55,27 +55,32 @@
end
# Create a new task.
# @param reactor [Async::Reactor] the reactor this task will run within.
# @param parent [Async::Task] the parent task.
- # @param propagate_exceptions [Boolean] whether exceptions raised in the task will propagate up the reactor stack.
- def initialize(reactor, parent = Task.current?, &block)
+ def initialize(reactor, parent = Task.current?, logger: nil, &block)
super(parent || reactor)
@reactor = reactor
@status = :initialized
@result = nil
@finished = nil
+ @logger = logger
+
@fiber = make_fiber(&block)
end
def to_s
"<#{self.description} #{@status}>"
end
+ def logger
+ @logger ||= @parent&.logger
+ end
+
# @attr ios [Reactor] The reactor the task was created within.
attr :reactor
def_delegators :@reactor, :with_timeout, :timeout, :sleep
# Yield back to the reactor and allow other fibers to execute.
@@ -98,12 +103,12 @@
else
raise RuntimeError, "Task already running!"
end
end
- def async(*args, &block)
- task = Task.new(@reactor, self, &block)
+ def async(*args, **options, &block)
+ task = Task.new(@reactor, self, **options, &block)
task.run(*args)
return task
end
@@ -179,13 +184,13 @@
if propagate
raise
elsif @finished.nil?
# If no one has called wait, we log this as an error:
- Async.logger.error(self) {$!}
+ logger.error(self) {$!}
else
- Async.logger.debug(self) {$!}
+ logger.debug(self) {$!}
end
end
def stop!
@status = :stopped
@@ -196,18 +201,18 @@
set!
begin
@result = yield(self, *args)
@status = :complete
- # Async.logger.debug("Task #{self} completed normally.")
+ # logger.debug("Task #{self} completed normally.")
rescue Stop
stop!
rescue StandardError => error
fail!(error, false)
rescue Exception => exception
fail!(exception, true)
ensure
- # Async.logger.debug("Task #{self} closing: #{$!}")
+ # logger.debug("Task #{self} closing: #{$!}")
finish!
end
end
end