public override void Done(GlobalOperationRegistration registration) { lock (_gate) { var result = _registrations.Remove(registration); Contract.ThrowIfFalse(result); if (_registrations.Count == 0) { var operations = _operations.AsImmutable(); _operations.Clear(); RaiseGlobalOperationStopped(operations, cancelled: false); } } }
public override void Cancel(GlobalOperationRegistration registration) { lock (_gate) { var result = _registrations.Remove(registration); Contract.ThrowIfFalse(result); if (_registrations.Count == 0) { var operations = _operations.AsImmutable(); _operations.Clear(); // We don't care if an individual operation has canceled. // We only care whether whole thing has cancelled or not. RaiseGlobalOperationStopped(operations, cancelled: true); } } }
public override GlobalOperationRegistration Start(string operation) { lock (_gate) { // create new registration var registration = new GlobalOperationRegistration(this, operation); // states _registrations.Add(registration); _operations.Add(operation); // the very first one if (_registrations.Count == 1) { Contract.ThrowIfFalse(_operations.Count == 1); RaiseGlobalOperationStarted(); } return(registration); } }
public abstract void Done(GlobalOperationRegistration registration);
public abstract void Cancel(GlobalOperationRegistration registration);