async def METHOD_NAME(
        previous_failed: typing.Optional[locks.Event]) -> None:
    # Wait for the previous task to finish, or for delay seconds
    if previous_failed is not None:
        with contextlib.suppress(exceptions_mod.TimeoutError):
            # Use asyncio.wait_for() instead of asyncio.wait() here, so
            # that if we get cancelled at this point, Event.wait() is also
            # cancelled, otherwise there will be a "Task destroyed but it is
            # pending" later.
            await tasks.wait_for(previous_failed.wait(), delay)
    # Get the next coroutine to run
    try:
        this_index, coro_fn = next(enum_coro_fns)
    except StopIteration:
        return
    # Start task that will run the next coroutine
    this_failed = locks.Event()
    next_task = loop.create_task(METHOD_NAME(this_failed))
    running_tasks.append(next_task)
    assert len(running_tasks) == this_index + 2
    # Prepare place to put this coroutine's exceptions if not won
    exceptions.append(None)
    assert len(exceptions) == this_index + 1
    try:
        result = await coro_fn()
    except (SystemExit, KeyboardInterrupt):
        raise
    except BaseException as e:
        exceptions[this_index] = e
        this_failed.set()  # Kickstart the next coroutine
    else:
        # Store winner's results
        nonlocal winner_index, winner_result
        assert winner_index is None
        winner_index = this_index
        winner_result = result
        # Cancel all other tasks. We take care to not cancel the current
        # task as well. If we do so, then since there is no `await` after
        # here and CancelledError are usually thrown at one, we will
        # encounter a curious corner case where the current task will end
        # up as done() == True, cancelled() == False, exception() ==
        # asyncio.CancelledError. This behavior is specified in
        # https://bugs.python.org/issue30048
        for i, t in enumerate(running_tasks):
            if i != this_index:
                t.cancel()