anchor.diff:      manager._monitorDone(this, job);
     }
   }
  +
  +/**
  + *  Listenes to the cancel task event and notifies the running job.
  + * The implementing job must implemnt the onCancel to take proper
  + * action on being cancelled.
  + */
  + abstract class TaskCancel {
  +  bool _cancelled = false;
  +  get cancelled => _cancelled;
  +
  +  ProgressMonitor _monitor;
  +
  +  TaskCancel(this._monitor) {
  +    _monitor.onCancel.listen((_) {
  +      _cancelled = true;
  +      onCancel();
  +    });
  +  }
  +
  +  onCancel();
  +}
  +
  
positive.code:   num _work = 0;
    bool _cancelled = false;
    Completer _cancelledCompleter;
  
    /**
     * Starts the [ProgressMonitor] with a [title] and a [maxWork] (determining
  
negative.code:   set cancelled(bool val) {
      _cancelled = val;
  
      _cancelController.add(true);
  
      if (_cancelledCompleter != null) {
        //_cancelledCompleter.completeError(new UserCancelledException());
        //_cancelledCompleter = null;
      }
    }
  
  