第七章系統介紹 WF 基礎活動:Sequence(循序容器)、Code(執行自訂代碼)、Throw/FaultHandler(異常拋出與捕獲)、Suspend(暫停)、Terminate(終止)。並深入講解視圖設計器的錯誤/取消視圖與斷點除錯技巧。
Sequence 是複合活動,子活動依序執行。範例建立主控台應用,加入 Sequence 並放入三個 Code 活動(DoTaskOne/Two/Three),輸出順序驗證循序語意。

Code 活動的 ExecuteCode 屬性指定事件處理器名稱。運行時觸發事件呼叫該方法,簽章為 void Method(object sender, EventArgs e)。本書大量使用此活動原型驗證邏輯。
直接在代碼中 throw 會被運行時「吞沒」。Throw 活動提供聲明式異常拋出:
FaultType:指定異常型別(如 System.Exception)。Fault:綁定工作流屬性/欄位至具體異常實例(含訊息),透過「綁定到新成員」建立相依屬性。範例:PreThrow 建立異常實例指派給 WorkflowException,Throw 拋出,PostThrow 不會執行。運行時觸發 WorkflowTerminated 事件。

右鍵設計器可切換三種視圖:
FaultHandler 活動,每個處理一種異常型別。藍色箭頭捲動區域,下方區域放置處理代碼(如 Code 活動)。智慧標籤亦可快速切換。除錯支援:右鍵活動 →「中斷點」→「插入中斷點」,活動顯示紅點,支援逐活動單步執行。

FaultHandler 至藍色箭頭間。FaultType 為 System.Exception(需與 Throw 的 FaultType 一致)。FaultHandler 內部區域拖曳 Code 活動(OnException),輸出異常訊息。執行結果:異常在工作流內部被處理,不觸發 WorkflowTerminated,工作流正常結束(但實例仍停止)。若需異常後繼續執行,應在代碼中使用 try/catch 包裹活動邏輯。

暫停不卸載實例,維持狀態等待人工介入。設定 Error 字串(可綁定屬性)。執行觸發 WorkflowSuspended 事件,參數攜帶錯誤訊息。宿主可選擇移除、恢復或重啟實例。範例在 FaultHandler 中加入 Suspend,主程式訂閱事件輸出日誌。

用法同 Suspend,但執行後實例徹底銷毀,所有待執行工作遺失。觸發 WorkflowTerminated 事件,Exception 屬性為 WorkflowTerminatedException。適用於資源耗盡、外部資料錯誤、資料庫不可用等無法恢復情境。

最佳實踐:Throw+FaultHandler用於預期內的業務異常;Suspend用於需人工介入的檢核點;Terminate用於無法恢復的嚴重錯誤。代碼層級try/catch可讓工作流在異常後繼續執行。