2012-11-28 33 views
2

我已經創建了一個包含子活動集合的自定義本地活動。如果其中一項活動失敗,我正試圖取消兒童活動。撥打context.CancelChildren()不會調用取消在兒童活動中。如何取消WF4中的兒童活動?

下面是例如:

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

回答

1

取消要求的活動是執行。因此,無論是等待書籤恢復的異步活動,還是等待子活動完成的組合活動。最常見的地方,雖然不是唯一的地方,但如果存在多個並行分支並且一個分支引發異常,則發生取消。由於存在未處理的異常,其他禁止繼續運行,因此它們被取消。

從您提供的代碼示例看來,沒有並行行爲,並且您在前一個完成之後計劃一個活動。由於執行單個活動會引發錯誤,因此不會有其他人取消。