internal Guid Schedule(JobRequest request)
        {
            logger.Trace(nameof(Schedule));

            var job = new ConversionJob(request, jobObserver);
            jobScheduler.Schedule(() => job.Execute());
            return job.Id;
        }
 internal ConversionJob(JobRequest request, IJobObserver jobObserver)
 {
     this.request = request;
     this.jobObserver = jobObserver;
     codec = new VideoCodec();
     transferrer = new WebClient();
     localInputFile = new FileInfo(Path.Combine(Path.GetTempPath(), $"{Id.ToString()}.input"));
     localOutputFile = new FileInfo(Path.Combine(Path.GetTempPath(), $"{Id.ToString()}.output"));
 }
        public Guid Process(JobRequest request)
        {
            logger.Trace(nameof(Process));

            return CurrentState.Process(this, request);
        }
 internal override Guid Process(JobProcessor processor, JobRequest request)
 {
     throw new ObjectDisposedException(IllegalCommandInStateMessage());
 }
 internal override Guid Process(JobProcessor processor, JobRequest request)
 {
     return processor.Schedule(request);
 }
 internal virtual Guid Process(JobProcessor processor, JobRequest request)
 {
     throw new InvalidOperationException(IllegalCommandInStateMessage());
 }