For gulp 4, first create this helper function:
function gulpTaskIf(condition, task) {
  task = gulp.series(task) // make sure we have a function that takes callback as first argument
  return function (cb) {
    if (condition()) {
      task(cb)
    } else {
      cb()
    }
  }
}
- As its first argument, this helper takes a condition in the form of a function. The condition function is run at the time when the task execution is to start, so you can i.e. check output of previous steps in the condition function.
 
- The second arguments specifies the task to be run and can be the same values that 
gulp.parallel() or  gulp.series() accept as arguments, i.e. string, function reference, or a return value from another gulp.parallel() or gulp.series(). 
- Returns a function that can be passedto 
gulp.task() as second argument or as an argument to gulp.parallel() or gulp.series() call. 
Examples (first one matches question):
- embedded in e.g. gulp.parallel() or gulp.series(), calling task by name
 
gulp.task('Build', gulp.parallel(
    'Preprocess HTML',
    'Prepeocess styles',
    runTaskIf(checkSomeCondition, 'some Task')
))
- as a task, calling task by name
 
function myTask() {
  return gulp.src(...)
    ...
    .dest(...)
}
gulp.task('my-task', myTask)
gulp.task('default', gulpTaskIf(
  function () {
    return Math.random() < 0.5; // example condition
  },
  'my-task')
- as a standalone task, calling task by function reference
 
function myTask() {
  return gulp.src(...)
    ...
    .dest(...)
}
gulp.task('default', gulpTaskIf(() => Math.random() < 0.5, myTask)
- as a standalone task, calling gulp.parallel() or gulp.series() reference
 
const manyTasks = gulp.parallel(task1, task2, task3)
gulp.task('default', gulpTaskIf(
  function () {
    return Math.random() < 0.5;
  },
  manyTasks)