本文系統說明 WF 4.0 的例外產生方式、流程結束狀態,以及 Throw、TryCatch、Rethrow、TerminateWorkflow 的實務應用。
OnUnhandledException 捕獲OnUnhandledException 捕獲| 觸發條件 | ActivityInstanceState | 觸發事件 |
|---|---|---|
| 正常完成 | Closed | Completed |
| Terminate / TerminateWorkflow / UnhandledExceptionAction.Terminate | Faulted | Completed |
| Cancel / UnhandledExceptionAction.Cancel | Canceled | Completed |
| Abort / UnhandledExceptionAction.Abort | 無(即時消失) | Aborted |
流程正常結束,狀態 Faulted,觸發 Completed。
流程即時終止,不觸發 Completed,觸發 Aborted。
流程正常結束,狀態 Faulted,觸發 Completed。
若在 CancellationScope 內,執行 CancellationHandler 後結束,狀態 Canceled,觸發 Completed。
// 自訂例外
public class MyException : Exception
{
public MyException(string msg) : base(msg) { }
}
// 工作流中設定 Throw.Exception = new MyException("自訂錯誤")

Try:要執行的活動Catches:Catch<T> 集合,依例外型別比對Finally:無論是否例外皆執行Variables:容器內變數

Try 放入 ExceptionActivity,Catches 加入 Catch<DivideByZeroException> 與 Catch<Exception>,Finally 列印「Finally 執行」。

Catch<T> 內部

Reason:錯誤訊息(字串)Exception:例外物件Faulted,觸發 Completed
