我可以控制工作流的活动是否是单身人士吗?我发现每次执行工作流时都会(重新)使用工作流中的相同活动类实例。
或简单地说,在activity方法的Execute()方法中,我得到了一个不同的context.WorkflowInstanceId,但是相同的context.ActivityInstanceId 。
这是设计的吗?默认情况下?
我可以控制活动实例吗?每次执行工作流程时,我都可以拥有一个新的活动实例吗?
答案 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
}
}