示例#1
0
        public ActivityResult Execute(
            Guid activityExecutionId,
            IActivityFactory factory,
            TContext context,
            IActivityInputProvider inputProvider,
            out object activityOutput,
            Action <object> beforeExecute)
        {
            IActivity <TInput, TOutput, TFailOutput> activity = null;

            try
            {
                activity = m_ActivityCreation(factory);
                object actout = null;

                TInput activityInput = null;
                try
                {
                    if (inputProvider != null)
                    {
                        activityInput = inputProvider.GetInput <TInput>();
                    }
                    if (activityInput == null)
                    {
                        activityInput = m_GetActivityInput(context);
                    }
                    beforeExecute(activity.IsInputSerializable ? activityInput : null);
                }
                catch (Exception e)
                {
                    beforeExecute("Failed to get activity  input: " + e);
                    throw;
                }
                var result = activity.Execute(
                    activityExecutionId,
                    activityInput,
                    output =>
                {
                    actout = output;
                    m_ProcessOutput(context, output);
                },
                    output =>
                {
                    actout = output;
                    m_ProcessFailOutput(context, output);
                });
                activityOutput = actout;
                return(result);
            }
            finally
            {
                if (activity != null)
                {
                    factory.Release(activity);
                }
            }
        }
示例#2
0
        public ActivityResult Resume <TClosure>(
            Guid activityExecutionId,
            IActivityFactory factory,
            TContext context,
            TClosure closure,
            out object activityOutput)
        {
            IActivity <TInput, TOutput, TFailOutput> activity = null;

            try
            {
                activity = m_ActivityCreation(factory);

                object actout = null;
                var    result = activity.Resume(
                    activityExecutionId,
                    output =>
                {
                    actout = output;
                    m_ProcessOutput(context, output);
                },
                    output =>
                {
                    actout = output;
                    m_ProcessFailOutput(context, output);
                },
                    closure);
                activityOutput = actout;
                return(result);
            }
            finally
            {
                if (activity != null)
                {
                    factory.Release(activity);
                }
            }
        }