public void HandleSubOrchestrationInstanceFailedEvent(SubOrchestrationInstanceFailedEvent failedEvent)
        {
            int taskId = failedEvent.TaskScheduledId;

            if (this.openTasks.ContainsKey(taskId))
            {
                OpenTaskInfo info = this.openTasks[taskId];

                // When using ErrorPropagationMode.SerializeExceptions the "cause" is deserialized from history.
                // This isn't fully reliable because not all exception types can be serialized/deserialized.
                // When using ErrorPropagationMode.UseFailureDetails we instead use FailureDetails to convey
                // error information, which doesn't involve any serialization at all.
                Exception cause = this.ErrorPropagationMode == ErrorPropagationMode.SerializeExceptions ?
                                  Utils.RetrieveCause(failedEvent.Details, this.ErrorDataConverter) :
                                  null;

                var failedException = new SubOrchestrationFailedException(failedEvent.EventId, taskId, info.Name,
                                                                          info.Version,
                                                                          failedEvent.Reason, cause);
                failedException.FailureDetails = failedEvent.FailureDetails;

                TaskCompletionSource <string> tcs = info.Result;
                tcs.SetException(failedException);

                this.openTasks.Remove(taskId);
            }
            else
            {
                LogDuplicateEvent("SubOrchestrationInstanceFailed", failedEvent, taskId);
            }
        }
示例#2
0
        public void HandleTimerFiredEvent(TimerFiredEvent timerFiredEvent)
        {
            int taskId = timerFiredEvent.TimerId;

            if (openTasks.ContainsKey(taskId))
            {
                OpenTaskInfo info = openTasks[taskId];
                info.Result.SetResult(timerFiredEvent.TimerId.ToString());
                openTasks.Remove(taskId);
            }
        }
示例#3
0
        public void HandleSubOrchestrationInstanceCompletedEvent(SubOrchestrationInstanceCompletedEvent completedEvent)
        {
            int taskId = completedEvent.TaskScheduledId;

            if (openTasks.ContainsKey(taskId))
            {
                OpenTaskInfo info = openTasks[taskId];
                info.Result.SetResult(completedEvent.Result);

                openTasks.Remove(taskId);
            }
        }
示例#4
0
        public void HandleTimerFiredEvent(TimerFiredEvent timerFiredEvent)
        {
            int taskId = timerFiredEvent.TimerId;

            if (this.openTasks.ContainsKey(taskId))
            {
                OpenTaskInfo info = this.openTasks[taskId];
                info.Result.SetResult(timerFiredEvent.TimerId.ToString());
                this.openTasks.Remove(taskId);
            }
            else
            {
                LogDuplicateEvent("TimerFired", timerFiredEvent, taskId);
            }
        }
        public void HandleTaskCompletedEvent(TaskCompletedEvent completedEvent)
        {
            int taskId = completedEvent.TaskScheduledId;

            if (openTasks.ContainsKey(taskId))
            {
                OpenTaskInfo info = openTasks[taskId];
                info.Result.SetResult(completedEvent.Result);

                openTasks.Remove(taskId);
            }
            else
            {
                LogDuplicateEvent("TaskCompleted", completedEvent, taskId);
            }
        }
示例#6
0
        public void HandleSubOrchestrationInstanceCompletedEvent(SubOrchestrationInstanceCompletedEvent completedEvent)
        {
            int taskId = completedEvent.TaskScheduledId;

            if (this.openTasks.ContainsKey(taskId))
            {
                OpenTaskInfo info = this.openTasks[taskId];
                info.Result.SetResult(completedEvent.Result);

                this.openTasks.Remove(taskId);
            }
            else
            {
                LogDuplicateEvent("SubOrchestrationInstanceCompleted", completedEvent, taskId);
            }
        }
示例#7
0
        public void HandleSubOrchestrationInstanceFailedEvent(SubOrchestrationInstanceFailedEvent failedEvent)
        {
            int taskId = failedEvent.TaskScheduledId;

            if (openTasks.ContainsKey(taskId))
            {
                OpenTaskInfo info            = openTasks[taskId];
                Exception    cause           = Utils.RetrieveCause(failedEvent.Details, dataConverter);
                var          failedException = new SubOrchestrationFailedException(failedEvent.EventId, taskId, info.Name,
                                                                                   info.Version,
                                                                                   failedEvent.Reason, cause);
                TaskCompletionSource <string> tcs = info.Result;
                tcs.SetException(failedException);

                openTasks.Remove(taskId);
            }
        }
        public void HandleTaskFailedEvent(TaskFailedEvent failedEvent)
        {
            int taskId = failedEvent.TaskScheduledId;

            if (openTasks.ContainsKey(taskId))
            {
                OpenTaskInfo info  = openTasks[taskId];
                Exception    cause = Utils.RetrieveCause(failedEvent.Details, dataConverter);

                var taskFailedException = new TaskFailedException(failedEvent.EventId, taskId, info.Name, info.Version,
                                                                  failedEvent.Reason, cause);

                TaskCompletionSource <string> tcs = info.Result;
                tcs.SetException(taskFailedException);

                openTasks.Remove(taskId);
            }
            else
            {
                LogDuplicateEvent("TaskFailed", failedEvent, taskId);
            }
        }