我已经创建了一个包含子活动集合的自定义本机活动。如果其中一项活动失败,我试图取消儿童活动。调用 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();
}
}
答案 0 :(得分:1)
取消需要执行活动。因此,要么是等待恢复书签的异步活动,要么是等待子活动完成的复合活动。最常见的地方,但不是唯一一个,取消发生的地方是,如果有多个并行分支,一个分支抛出异常。其他禁令无法继续运行,因为存在未处理的异常,因此它们会被取消。
从您提供的代码示例中,似乎没有并行行为,并且您在上一个活动完成后安排活动。由于单个活动执行会引发错误,因此没有其他活动可以取消。