             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

     * will be dispatched immediately.
     */
    public function shutdown () :void {
        _shutdown = true;
        terminateIfNecessary();
    }

    /**
