首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF 4.0 NativeActivity 錯誤處理:FaultCallback 與 CancelChild

     編輯:關於.NET

環境:.NET Framework 4.0 RC 1。NativeActivity 透過 NativeActivityContext.ScheduleActivity() 調度子活動,其中一個多載接受 FaultCallback 委派,用於處理子活動拋出的未捕獲例外。

錯誤處理基本模式

public sealed class MyActivity : NativeActivity {
    public Activity Body { get; set; }

    protected override void Execute(NativeActivityContext context) {
        context.ScheduleActivity(Body, FaultHandler);
    }

    private void FaultHandler(NativeActivityFaultContext faultContext, 
                              Exception propagatedException, 
                              ActivityInstance propagatedFrom) {
        Console.WriteLine(propagatedException.Message);
        faultContext.HandleFault(); // 標記錯誤已處理
    }
}

隱藏陷阱:錯誤處理後子活動繼續執行

測試工作流:外層 Sequence → MyActivity(內層 Sequence: WriteLine → Throw → WriteLine) → WriteLine。

預期:Throw 後內層第二個 WriteLine 不執行,外層結束 WriteLine 執行。

實際:內層第二個 WriteLine 仍然執行!類似 VB6 On Error Resume Next 行為。

預期輸出 實際輸出

修正:呼叫 CancelChild 終止子活動

NativeActivityFaultContext.CancelChild(ActivityInstance) 明確取消發生錯誤的子活動實例,防止後續節點繼續執行。

private void FaultHandler(NativeActivityFaultContext faultContext, 
                          Exception propagatedException, 
                          ActivityInstance propagatedFrom) {
    Console.WriteLine(propagatedException.Message);
    faultContext.HandleFault();
    faultContext.CancelChild(propagatedFrom); // 關鍵:取消錯誤來源活動
}

加上此行後,工作流行為符合預期:錯誤發生點後的同層級活動被取消,控制權返回父活動繼續執行。

原文連結:Error Handling in a NativeActivity

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved