C# 如何取消WF4中的子活动?

C# 如何取消WF4中的子活动?,c#,workflow-foundation-4,C#,Workflow Foundation 4,我已经创建了一个带有子活动集合的自定义本机活动。如果其中一个活动失败,我将尝试取消子活动。调用context.CancelChildren()不会在子活动中调用cancel 下面是一个例子: public sealed class MyCompositeActivity : NativeActivity { public Collection<Activity> Activities { get; set; } protected override void Exe

我已经创建了一个带有子活动集合的自定义本机活动。如果其中一个活动失败,我将尝试取消子活动。调用context.CancelChildren()不会在子活动中调用cancel

下面是一个例子:

public sealed class MyCompositeActivity : NativeActivity
{
    public Collection<Activity> Activities { get; set; }

    protected override void Execute(NativeActivityContext context)
    {
        ScheduleActivity(context);
    }

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        base.CacheMetadata(metadata);

        metadata.SetChildrenCollection(Activities);
     }

    private void ScheduleActivity(NativeActivityContext context)
    {
        // Get next activity
        ....
        context.ScheduleActivity(nextActivity, OnActivityCompleted, OnActivityFaulted);
    }

    private static void OnActivityFaulted(NativeActivityFaultContext context, Exception exception, ActivityInstance faultedInstance)
    {
        context.HandleFault();
        context.CancelChildren();
    }
}
公共密封类MyCompositeActivity:NativeActivity
{
公共收集活动{get;set;}
受保护的覆盖无效执行(NativeActivityContext上下文)
{
计划活动(上下文);
}
受保护的覆盖无效缓存元数据(NativeActivityMetadata)
{
base.CacheMetadata(元数据);
metadata.SetChildrenCollection(活动);
}
私有void ScheduleActivity(NativeActivityContext上下文)
{
//获取下一个活动
....
context.ScheduleActivity(nextActivity、OnActivityCompleted、onactivityfault);
}
ActivityFaulted上的私有静态无效(NativeActivityFaultContext上下文、异常、ActivityInstance faultedInstance)
{
context.HandleFault();
context.CancelChildren();
}
}

取消需要执行活动。因此,它要么是等待书签恢复的异步活动,要么是等待子活动完成的复合活动。最常见的情况(尽管不是唯一的情况)是,如果存在多个并行分支,并且一个分支引发异常,则会发生取消。其他banches无法继续运行,因为存在未处理的异常,因此它们被取消

从您提供的代码示例来看,似乎不存在并行行为,并且您正在调度前一个活动完成后的活动。由于执行的单个活动抛出错误,因此没有其他活动可取消