一种方法可以是实现自定义TrackingParticipant
。这可以用于监视活动状态何时更改为关闭状态。当它关闭时,您可以检查参数以查看是否有任何您想要清理的资源。
它可能是这个样子:
public interface IResource
{
}
public class MyTrackingParticipant : TrackingParticipant
{
private readonly MyResourceManager resourceManager;
public MyTrackingParticipant(MyResourceManager resourceManager)
{
this.resourceManager = resourceManager;
}
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
var activityStateRecord = record as ActivityStateRecord;
if (activityStateRecord != null && activityStateRecord.State == ActivityStates.Closed)
{
// Scan arguments to see if resources should be deallocated from resource manager.
foreach (var keyValuePair in activityStateRecord.Arguments)
{
// If the argument is of a resource type...
var resource = keyValuePair.Value as IResource;
if (resource != null)
this.resourceManager.DeallocateResource(resource);
}
}
}
}
而且使用自定义跟踪参与者,就像任何其他的WF扩展:
var resourceManager = new MyResourceManager();
var wfResourceTrackingParticipant = new MyTrackingParticipant(resourceManager);
var workflow1 = new Workflow1();
var workflowApp = new WorkflowApplication(workflow1);
workflowApp.Extensions.Add(wfResourceTrackingParticipant);
感谢您的反馈。但是,我在*自动*通知之后,因为我使用的变量是否不再需要。我不喜欢WF的作者用一个明确的“CleanupActivity”来分发工作流。 –
考虑一下之后,实现一个自定义跟踪参与者可能是一条路。我更新了我的答案以反映这种方法。 – ajawad987
太棒了,这符合我所寻找的,谢谢。我会尝试并让你知道。 –