工作流实例是单例?控制活动实例化?

时间:2016-02-12 10:10:54

标签: workflow-foundation-4 workflow-foundation workflow-activity

我可以控制工作流的活动是否是单身人士吗?我发现每次执行工作流时都会(重新)使用工作流中的相同活动类实例。

或简单地说,在activity方法的Execute()方法中,我得到了一个不同的context.WorkflowInstanceId,但是相同的context.ActivityInstanceId

这是设计的吗?默认情况下?

我可以控制活动实例吗?每次执行工作流程时,我都可以拥有一个新的活动实例吗?

1 个答案:

答案 0 :(得分:1)

是的,这是默认行为。活动实例可以是miltithreaded环境(Web上下文)中的相同实例,它可以咬你。因此,为了安全起见,您应该始终将所有活动变量作为参数。参数通过ActivityContext传递,对于每个活动实例都是不同的。

public class CustomActivity : Activity
{
   public int Age { get; set; }

   protected override void Execute(CodeActivityContext context)
   {
        //do some work with Age 
   }
}

由于不同的线程可以设置/获取相同的实例变量,而不是上面的代码,你应该这样做:

public class CustomActivity : Activity
{
   public InOutArgument<int> Age { get; set; }

   protected override void Execute(CodeActivityContext context)
   {
        //do some work with Age within CodeActivityContext 
   }
}