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