We just caught this one this morning… It looks like WF 4 reuses activity instances across workflow instances. So if I have a WorkflowService that’s hosted in IIS, and I call it from two different client threads at the same time, the two workflow instances now running on the server may be using the same activity instances for child activities. The documentation is not clear on this point, but that’s the behavior we observed.
The implication is that you have to treat calls to your Activity’s Execute method as stateless, and not maintain any state in your activity between calls to Execute. (Our specific problem was around EntityFramework containers. Apparently they don’t like being called on multiple threads. :) )
Makes sense, but it’s not clear at all from the documentation that it would be the case. You can rely on the thread safety of your InArguments and OutArguments, since they are accessed through the context, but private fields are right out unless whatever you store in them is also threadsafe.
Powered by: newtelligence dasBlog 2.3.9074.18820
The opinions expressed herein are my own personal opinions and do not represent
my employer's view in any way.
© Copyright 2017, Patrick Cauldwell