コード例 #1
0
        public void ConsumeMessage <TMessage>(TMessage message)
        {
            if (_startsOn.ContainsKey(typeof(TMessage)))
            {
                var run = new WorkflowRun <TWfContext>(
                    ((Func <TMessage, TWfContext>)_startsOn[typeof(TMessage)])(message));
                _runs.Add(run);
                WorkflowStarted?.Invoke(this, new WorkflowEventArgs <TWfContext>(run.RunId, run.Context));
                IterateWorkflow(run);
                return;
            }

            var runs          = _runs.ToArray();
            var tasksToFinish = _continuesOn.Where(kv => kv.Value == typeof(TMessage)).Select(kv => kv.Key);

            foreach (var workflowTask in tasksToFinish)
            {
                var messageBasedTask = (WorkflowTask <TWfContext, TMessage>)workflowTask;
                var runsToProcess    = runs.Where(r =>
                                                  (messageBasedTask).WorkflowRunSelector(r.Context, message))
                                       .Where(r => r.HasStarted(workflowTask));
                foreach (var run in runsToProcess)
                {
                    messageBasedTask.AfterMessageReceived?.Invoke(run.Context, message);
                    TaskFinished?.Invoke(this,
                                         new WorkflowTaskEventArgs <TWfContext>(run.RunId, workflowTask.TaskId, run.Context));
                    run.FinishTask(workflowTask);
                    IterateWorkflow(run);
                }
            }
        }
コード例 #2
0
 internal void RaiseWorkflowStarted(WorkflowInstance wi)
 {
     WorkflowStarted.RaiseEvent(this, new WorkflowEventArgs(wi));
 }