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

從零打造工作流執行引擎(系列):以 Delegate 序列化實現持久化、版本演進與並行控制

     編輯:關於.NET

受《WF本質論》啟發,本系列嘗試以 .NET 底層技術——可序列化委托——逐步構建一個微型工作流執行時。從最原始的「委托序列化/反序列化」起步,經過宿主與業務邏輯解耦、Activity 基類抽象、程序與資料分離、Frame/Stack 狀態管理、並行與書簽機制,十個版本層層遞進,完整呈現 WF 核心設計決策的來龍去脈。

核心洞見:委托即延續

.NET 委托可序列化,意味著「執行指標」可跨進程、跨機器持久化與恢復。這移除了程式碼對特定進程的「親和力」,實現水平擴展、長期暫停、甚至取消執行。系列第一版即展示:將委托序列化至檔案,下一次執行反序列化並 DynamicInvoke,即可接續輸出 "Hello world"。

版本演進脈絡

版本關鍵重構核心收穫
V1單一程式直接序列化委托驗證委托可跨進程恢復執行
V2引入 ReadReadWrite 類別,業務邏輯移出 Main宿主與業務初步分離,NextDelegate 統一簽名
V3定義 Activity 基類,消除宿主對具體步驟的耦合宿主通用化,Activity 成為擴充點
V4拆分 Read1/Read2,嘗試共用讀取邏輯發現狀態與委托耦合,難以複用
V5合併讀取類別,以名稱存取狀態而非靜態欄位活動可複用,狀態外部化雛形
V6引入 Stack<Frame>,將委托與狀態移入 Frame,Sequence 執行邏輯下沉程序(Sequence)與資料(Frame)徹底分離
V7Frame 封裝堆疊操作,驅動所有執行流程執行引擎核心成型
V8Frame 樹狀結構支援多頂點,委托簽名改為 Action<Frame>實現真正並行:多個未完成活動共存
V9引入 Parallel 活動調度兩個 Read並行活動允許多個等待外部訊號的工作項
V10書簽機制:活動發訊號請求資料,宿主回填資料喚醒完成「宿主↔工作流」雙向通訊閉環

關鍵架構決策

  • 程序不可變:WF3 採用程序副本,WF4 採用副本+運行時驗證,防止執行期竄改;
  • 資料作用域:Frame 隔離變數作用域,解決迴圈多次執行的資料汙染;
  • 委托不序列化:改序列化 MethodInfo + 活動 ID,斷開對原程式集的強參考;
  • 書簽替代 Queue:輕量級等待/喚醒,符合 WF4 設計哲學。

程式碼下載

HomeMadeWF.zip 包含完整十個版本原始碼,建議逐版對照閱讀,體會每一步重構的動機與取捨。

雖然距離生產級 WF 尚遠,但此系列已揭示工作流引擎的靈魂:以可序列化的延續實現持久化,以 Frame 隔離狀態,以書簽連接外部世界。理解這些本質,方能駕馭任何工作流框架。

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