code: async def invoke(self, context):
          
          try:
              # Note: claim_work(...) might not be safely interruptible! See
              # https://bugzilla.mozilla.org/show_bug.cgi?id=1524069
              tasks = await self._run_cancellable(claim_work(context))
              if not tasks or not tasks.get('tasks', []):
                  await self._run_cancellable(asyncio.sleep(context.config['poll_interval']))
                  return None
  
              # Assume only a single task, but should more than one fall through,
              # run them sequentially.  A side effect is our return status will
              # be the status of the final task run.
              status = None
              for task_defn in tasks.get('tasks', []):
                  prepare_to_run_task(context, task_defn)
                  reclaim_fut = context.event_loop.create_task(reclaim_task(context, context.task))
                  try:
                      status = await do_run_task(context, self._run_cancellable, self._to_cancellable_process)
                      artifacts_paths = filepaths_in_dir(context.config['artifact_dir'])
                  except WorkerShutdownDuringTask:
                      shutdown_artifact_paths = [os.path.join('public', 'logs', log_file)
                                                 for log_file in ['chain_of_trust.log', 'live_backing.log']]
                      artifacts_paths = [path for path in shutdown_artifact_paths
                                         if os.path.isfile(os.path.join(context.config['artifact_dir'], path))]
                      status = STATUSES['worker-shutdown']
                  status = worst_level(status, await do_upload(context, artifacts_paths))
                  await complete_task(context, status)
                  reclaim_fut.cancel()
                  cleanup(context)
  
              return status
  
          except asyncio.CancelledError:
              return None
docs: Claims and processes Taskcluster work.
  
          Args:
              context (scriptworker.context.Context): context of worker
  
          Returns: status code of build