async def start_task(self, task: Task) -> None:
try:<EOL><INDENT>Log.debug('<STR_LIT>', task.name)<EOL>before = time.time()<EOL>task.counters['<STR_LIT>'] = before<EOL>task.running = True<EOL>self.running_tasks.add(task)<EOL>await task.run_task()<EOL>Log.debug('<STR_LIT>', task.name)<EOL><DEDENT>except CancelledError:<EOL><INDENT>Log.debug('<STR_LIT>', task.name)<EOL><DEDENT>except Exception:<EOL><INDENT>Log.exception('<STR_LIT>', task.name)<EOL><DEDENT>finally:<EOL><INDENT>self.running_tasks.discard(task)<EOL>task.running = False<EOL>task.task = None<EOL>after = time.time()<EOL>total = after - before<EOL>task.counters['<STR_LIT>'] = after<EOL>task.counters['<STR_LIT>'] = total<EOL><DEDENT>
Initialize the task, queue it for execution, add the done callback,
        and keep track of it for when tasks need to be stopped.