code: @Override
      public void waveHandled(final Wave wave) {
          synchronized (this) {
  
              afterEach(this.waveSource, wave);
  
              if (isSequential()) {
  
                  // Move the index to retrieve the next command to run
                  this.commandRunIndex++;
  
                  // Run next command if any
                  if (this.subCommandList.size() > this.commandRunIndex) {
                      // Recurse to handle next command
                      perform(wave);
                  } else {
                      this.running.set(false);
                      // No more command to run the MultiCommand is achieved
                      fireHandled(this.waveSource);
                  }
              } else {
  
                  // Remove each command that has been performed
                  this.pendingWaves.remove(wave);
  
                  // If there is no pending waves left, send the waveConsumed event on the MultiCommand wave
                  if (this.pendingWaves.isEmpty()) {
                      fireHandled(this.waveSource);
                  }
              }
          }
      }
docs: {@inheritDoc}