internal override Guid Process(JobProcessor processor, JobRequest request)
 {
     throw new ObjectDisposedException(IllegalCommandInStateMessage());
 }
 internal override void Start(JobProcessor processor)
 {
     processor.CurrentState = new Idle();
     processor.Initiate();
 }
 internal override void Dispose(JobProcessor processor)
 {
     // We are already disposed and must handle subsequent calls to Dispose()
     // in an idempotent manner, thus - do nothing instead of throwing.
 }
 internal override void Dispose(JobProcessor processor)
 {
     processor.CurrentState = new Disposed();
     processor.Terminate();
 }
 internal override Guid Process(JobProcessor processor, JobRequest request)
 {
     return processor.Schedule(request);
 }
 internal virtual void Stop(JobProcessor processor)
 {
     throw new InvalidOperationException(IllegalCommandInStateMessage());
 }
 internal virtual Guid Process(JobProcessor processor, JobRequest request)
 {
     throw new InvalidOperationException(IllegalCommandInStateMessage());
 }
 internal override void Stop(JobProcessor processor)
 {
     throw new ObjectDisposedException(IllegalCommandInStateMessage());
 }