docs: def run_job():
      """Takes an async object and executes its job."""
      async = get_current_async()
      async_options = async.get_options()
  
      job = async_options.get('job')
      if not job:
          raise Exception('This async contains no job to execute!')
  
      __, args, kwargs = job
  
      if args is None:
          args = ()
  
      if kwargs is None:
          kwargs = {}
  
      function = async._decorate_job()
  
      try:
          async.executing = True
          async.result = AsyncResult(payload=function(*args, **kwargs),
                                     status=AsyncResult.SUCCESS)
      except Abort as abort:
          logging.info('Async job was aborted: %r', abort)
          async.result = AsyncResult(status=AsyncResult.ABORT)
  
          # QUESTION: In this eventuality, we should probably tell the context we
          # are "complete" and let it handle completion checking.
          _handle_context_completion_check(async)
          return
      except AbortAndRestart as restart:
          logging.info('Async job was aborted and restarted: %r', restart)
          raise
      except BaseException as e:
          async.result = AsyncResult(payload=encode_exception(e),
                                     status=AsyncResult.ERROR)
  
      _handle_results(async_options)
      _handle_context_completion_check(async)