Beispiel #1
0
        public RemoteTaskInfo[] GetTaskInfos([NotNull, ItemNotNull] string[] taskIds)
        {
            if (taskIds.Any(string.IsNullOrWhiteSpace))
            {
                throw new InvalidOperationException(string.Format("Every taskId must be non-empty: {0}", string.Join(", ", taskIds)));
            }
            var tasks = HandleTaskCollection.GetTasks(taskIds);
            var taskExceptionInfos = TaskExceptionInfoStorage.Read(tasks.Select(x => x.Meta).ToArray());

            return(tasks.Select(task =>
            {
                var taskType = TaskDataRegistry.GetTaskType(task.Meta.Name);
                var taskData = (IRtqTaskData)Serializer.Deserialize(taskType, task.Data);
                return new RemoteTaskInfo(task.Meta, taskData, taskExceptionInfos[task.Meta.Id]);
            }).ToArray());
        }
Beispiel #2
0
        public IRemoteTask CreateTask <T>([NotNull] T taskData, [CanBeNull] CreateTaskOptions createTaskOptions = null) where T : IRtqTaskData
        {
            createTaskOptions ??= new CreateTaskOptions();
            var type     = taskData.GetType();
            var taskId   = TimeGuid.NowGuid().ToGuid().ToString();
            var taskMeta = new TaskMetaInformation(TaskDataRegistry.GetTaskName(type), taskId)
            {
                Attempts          = 0,
                Ticks             = Timestamp.Now.Ticks,
                ParentTaskId      = string.IsNullOrEmpty(createTaskOptions.ParentTaskId) ? GetCurrentExecutingTaskId() : createTaskOptions.ParentTaskId,
                TaskGroupLock     = createTaskOptions.TaskGroupLock,
                State             = TaskState.New,
                MinimalStartTicks = 0,
            };
            var taskDataBytes = Serializer.Serialize(type, taskData);
            var task          = new Task(taskMeta, taskDataBytes);

            return(enableContinuationOptimization && localTaskQueue != null
                       ? new RemoteTaskWithContinuationOptimization(task, TaskTtl, HandleTaskCollection, localTaskQueue)
                       : new RemoteTask(task, TaskTtl, HandleTaskCollection));
        }