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