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()); }
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)); }