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

WF 4.0 基礎篇(十一):例外處理與流程終止完整指南

     編輯:關於.NET

前言

本文系統說明 WF 4.0 的例外產生方式、流程結束狀態,以及 Throw、TryCatch、Rethrow、TerminateWorkflow 的實務應用。

WF 例外產生來源

  • Throw 活動:主動拋出例外,不會讓宿主崩潰,VS 偵錯不會中斷,可被 OnUnhandledException 捕獲
  • Code Activity 執行錯誤:如除以零,不會讓宿主崩潰,VS 偵錯會中斷,可被 OnUnhandledException 捕獲

流程結束狀態對照表

觸發條件ActivityInstanceState觸發事件
正常完成ClosedCompleted
Terminate / TerminateWorkflow / UnhandledExceptionAction.TerminateFaultedCompleted
Cancel / UnhandledExceptionAction.CancelCanceledCompleted
Abort / UnhandledExceptionAction.Abort無(即時消失)Aborted

OnUnhandledException 處理策略

無處理器

流程正常結束,狀態 Faulted,觸發 Completed。

UnhandledExceptionAction.Abort

流程即時終止,不觸發 Completed,觸發 Aborted。

UnhandledExceptionAction.Terminate

流程正常結束,狀態 Faulted,觸發 Completed。

UnhandledExceptionAction.Cancel

若在 CancellationScope 內,執行 CancellationHandler 後結束,狀態 Canceled,觸發 Completed。

Throw 活動

// 自訂例外
public class MyException : Exception
{
    public MyException(string msg) : base(msg) { }
}

// 工作流中設定 Throw.Exception = new MyException("自訂錯誤")

Throw 結構 設計器設定

TryCatch / Catch<T> 例外捕獲

核心屬性

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

TryCatch 結構 Catch 參數

範例:捕獲 Code Activity 例外

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

工作流設計 執行結果

Rethrow 重新拋出例外

  • 僅能用於 Catch<T> 內部
  • 不需建立新例外,直接拋出原例外
  • 適用於處理完邏輯後仍需讓上層感知錯誤

Rethrow 結構 工作流設計 執行結果

TerminateWorkflow 終止流程

  • Reason:錯誤訊息(字串)
  • Exception:例外物件
  • 執行後流程狀態為 Faulted,觸發 Completed

TerminateWorkflow 結構 工作流設計 執行結果

原始碼下載

ExceptionWorkflow.rar

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