async Task <JobHandle <T> > IJobService.CreateJob <T>(ConsumeContext context, Guid jobId, T command, IJobFactory <T> jobFactory) { if (_stopping) { throw new InvalidOperationException("The job service is stopping."); } var jobContext = new ConsumerJobContext <T>(context, jobId, command); var babyTask = Run(jobContext, jobFactory); var jobHandle = new ConsumerJobHandle <T>(jobContext, babyTask); _registry.Add(jobHandle); await ScheduleSupervision(jobContext, jobContext.Command, jobHandle).ConfigureAwait(false); return(jobHandle); }
async Task <JobHandle <T> > ITurnoutController.CreateJob <T>(ConsumeContext <T> context, IJobFactory <T> jobFactory) { var jobContext = new ConsumerJobContext <T>(context); var babyTask = Run(jobContext, jobFactory); var jobHandle = new ConsumerJobHandle <T>(jobContext, babyTask); _roster.Add(jobContext.JobId, jobHandle); var utcNow = DateTime.UtcNow; var scheduledTime = utcNow + _superviseInterval; var check = new Supervise(jobContext.JobId, utcNow, jobHandle.Status); await context.ScheduleMessage(_controlAddress, scheduledTime, check).ConfigureAwait(false); return(jobHandle); }