示例#1
0
        private void StartJob(TaskExecutionModel executionModel, CancellationToken cancellationToken)
        {
            if (!handlerFactories.TryGetValue(executionModel.TaskModel.GetType(), out TaskHandlerMetadata handlerMetadata))
            {
                throw new InvalidOperationException();
            }

            var jobScope = serviceProvider.CreateScope();

            var job = new TaskJob(executionModel, handlerMetadata, jobScope, this);

            job.Run(cancellationToken);
        }
示例#2
0
        public TaskJob(TaskExecutionModel executionModel, TaskHandlerMetadata handlerMetadata, IServiceScope serviceScope, IJobExecutorContext executorContext)
        {
            if (executionModel == null)
            {
                throw new ArgumentNullException(nameof(executionModel));
            }
            if (handlerMetadata == null)
            {
                throw new ArgumentNullException(nameof(handlerMetadata));
            }
            if (executionModel.Timeout <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(executionModel.Timeout));
            }

            TaskId                = executionModel.TaskId;
            taskModel             = executionModel.TaskModel;
            timeoutInMilliseconds = executionModel.Timeout;

            taskHandler          = (ITaskHandler)serviceScope.ServiceProvider.GetRequiredService(handlerMetadata.HandlerType);
            this.executorContext = executorContext ?? throw new ArgumentNullException(nameof(executorContext));
        }