2

我创建了一个包含子活动集合的自定义原生活动。如果其中一项活动失败,我正在尝试取消子活动。调用context.CancelChildren()不会在子活动中调用取消。

下面是例子:

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();
    }
}
4

1 回答 1

1

取消需要正在执行的活动。因此,要么是等待书签恢复的异步活动,要么是等待子活动完成的复合活动。最常见的地方,虽然不是唯一的地方,发生取消的地方是如果有多个并行分支并且一个分支抛出异常。其他银行无法继续运行,因为存在未处理的异常,因此它们被取消。

从您提供的代码示例来看,似乎没有并行行为,您正在安排前一个活动完成后的活动。由于执行的单个活动引发错误,因此没有其他活动可以取消。

于 2012-11-28T18:10:45.330 回答