grunt call other tasks from the main task

Sometimes you may wish to call other tasks from a main task.

Asume we have build and a dist tasks. By passing the option --build to the dist task, the build task should run before.

Unfortunately, the build task repeats in an endless loop ?

grunt dist --build

Example (short and simplified):

  // command: grunt build
  grunt.registerTask('build', 'Dist task', function() {

    grunt.initConfig({...}); // cssmin, htmlmin tasks etc...

    grunt.task.run(tasksArray); 
  });

  // command: grunt dist
  grunt.registerTask('dist', 'Build task', function() {

    // Option: --build
    var buildOption = grunt.option('build');

    if (buildOption != null) {
      grunt.task.run('build'); // Run the build task first
    }

    grunt.initConfig({...}); // compress task etc...

    grunt.task.run(tasksArray);
  });

How can I prevent the endless repeat of the build task?


Note:

Of course I may use something like: grunt build && grunt dist, but the example above is (as mentioned) a simplified example for something bigger.