code: private void scheduleDriversForTaskLifeCycle()
      {
          // This method is called at the beginning of the task.
          // It schedules drivers for all the pipelines that have task life cycle.
          List<DriverSplitRunner> runners = new ArrayList<>();
          for (DriverSplitRunnerFactory driverRunnerFactory : driverRunnerFactoriesWithTaskLifeCycle) {
              for (int i = 0; i < driverRunnerFactory.getDriverInstances().orElse(1); i++) {
                  runners.add(driverRunnerFactory.createDriverRunner(null, Lifespan.taskWide()));
              }
          }
          enqueueDriverSplitRunner(true, runners);
          for (DriverSplitRunnerFactory driverRunnerFactory : driverRunnerFactoriesWithTaskLifeCycle) {
              driverRunnerFactory.noMoreDriverRunner(ImmutableList.of(Lifespan.taskWide()));
              verify(driverRunnerFactory.isNoMoreDriverRunner());
          }
      }
docs: They also have a few differences, making it more convenient to keep the two methods separate.