             cancelled.push(toRun.f);
         }
         _toRun = new Vector.<ToRun>();
+        terminateIfNecessary();
         return cancelled;
+    }
+
+    protected function terminateIfNecessary () :void {
+        if (_terminated || !isIdle) return;
+        _terminated = true;
+        terminated.dispatch(this);
     }
 
     protected function handleTimer (event :TimerEvent) :void {

    public function get isIdle () :Boolean { return _running.length == 0 && _toRun.length == 0; }

    /** Returns true if shutdown has been called and there are no pending or running jobs. */
    public function get isTerminated () :Boolean { return isShutdown && isIdle; }

    /**
     * Prevents additional jobs from being submitted to this Executor. Jobs that have already been


    protected var _maxSimultaneous :int;
    protected var _shutdown :Boolean;
    protected var _terminated :Boolean;
    protected var _running :Vector.<Future> = new Vector.<Future>();
    protected var _toRun :Vector.<ToRun> = new Vector.<ToRun>();
    protected var _timer :Timer = new Timer(1);
