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

WF 4.0 基礎篇(十二):CancellationScope 取消容器深度解析

     編輯:關於.NET

前言

CancellationScope 提供工作流中優雅處理取消邏輯的機制,包含正常執行路徑與取消處理常式。本文說明其在例外處理與 Parallel 並行容器中的應用。

核心結構

屬性類型說明
BodyActivity正常執行路徑
CancellationHandlerActivity取消時執行的清理邏輯
VariablesCollection<Variable>容器內部變數

結構圖 設計器檢視

範例一:搭配 OnUnhandledException.Cancel 處理例外

自訂拋出例外活動

public sealed class ExceptionActivity : CodeActivity
{
    protected override void Execute(CodeActivityContext context)
    {
        int v = 1 - 1;
        double i = 1 / v; // DivideByZeroException
    }
}

工作流設計

在 CancellationScope.Body 中放入 ExceptionActivity,CancellationHandler 放入 WriteLine 列印「取消處理」。

工作流設計

宿主設定

static UnhandledExceptionAction unhandledException_Cancel(WorkflowApplicationUnhandledExceptionEventArgs e)
{
    Console.WriteLine("unhandledException_Cancel:{0}", e.UnhandledException.Message);
    return UnhandledExceptionAction.Cancel; // 關鍵:回傳 Cancel
}

執行流程

  1. ExceptionActivity 拋出例外
  2. 宿主 OnUnhandledException 回傳 Cancel
  3. 觸發 CancellationScope.CancellationHandler
  4. 完成後工作流正常結束,狀態為 Canceled,觸發 Completed 事件

執行結果

範例二:Parallel 中使用 CancellationScope

情境說明

Parallel 並行執行多個分支,配合 CompletionCondition 可在滿足條件時提前結束。搭配 CancellationScope 可確保被取消的分支執行清理邏輯。

工作流設計

  • 變數 myVariable=false
  • Parallel.CompletionCondition = myVariable
  • 分支 A:Delay 15s → 列印 "A" → myVariable=true,CancelHandler 列印 "Cancellation:A取消"
  • 分支 B:Delay 10s → 列印 "B" → myVariable=true,CancelHandler 列印 "Cancellation:B取消"

工作流設計

執行結果

分支 B 先完成(10 秒),設定變數為 true,Parallel 條件滿足結束。分支 A 尚在等待中被取消,執行其 CancelHandler。

輸出順序:B1 → B2 → Cancellation:A取消

執行結果

原始碼下載

CancellationScopeSample.rar

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