Пример #1
0
        static TaskMessage ProcessScheduleTaskDecision(
            ScheduleTaskOrchestratorAction scheduleTaskOrchestratorAction,
            OrchestrationRuntimeState runtimeState,
            bool includeParameters)
        {
            var taskMessage = new TaskMessage();

            var scheduledEvent = new TaskScheduledEvent(scheduleTaskOrchestratorAction.Id)
            {
                Name    = scheduleTaskOrchestratorAction.Name,
                Version = scheduleTaskOrchestratorAction.Version,
                Input   = scheduleTaskOrchestratorAction.Input
            };

            taskMessage.Event = scheduledEvent;
            taskMessage.OrchestrationInstance = runtimeState.OrchestrationInstance;

            if (!includeParameters)
            {
                scheduledEvent = new TaskScheduledEvent(scheduleTaskOrchestratorAction.Id)
                {
                    Name    = scheduleTaskOrchestratorAction.Name,
                    Version = scheduleTaskOrchestratorAction.Version
                };
            }

            runtimeState.AddEvent(scheduledEvent);
            return(taskMessage);
        }
        public async Task <object> ScheduleTaskInternal(string name, string version, string tasklist, Type resultType,
                                                        params object[] parameters)
        {
            int    id = idCounter++;
            string serializedInput        = dataConverter.Serialize(parameters);
            var    scheduleTaskTaskAction = new ScheduleTaskOrchestratorAction
            {
                Id       = id,
                Name     = name,
                Version  = version,
                Tasklist = tasklist,
                Input    = serializedInput,
            };

            orchestratorActionsMap.Add(id, scheduleTaskTaskAction);

            var tcs = new TaskCompletionSource <string>();

            openTasks.Add(id, new OpenTaskInfo {
                Name = name, Version = version, Result = tcs
            });

            string serializedResult = await tcs.Task;

            return(dataConverter.Deserialize(serializedResult, resultType));
        }