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

WF4.0 基礎篇(14):Delay 延遲與工作流執行緒模型深度解析

     編輯:關於.NET

本文揭示 WF4.0 核心執行模型:**工作流實例單執行緒執行**,Delay 非 Thread.Sleep,Parallel 非多執行緒並行,WorkflowInvoker 與 WorkflowApplication 執行緒模式迥異,InvokeMethod 可跨執行緒呼叫非同步方法。

核心觀念:單執行緒執行模型

WF3.x 與 WF4.0 皆採單執行緒模型。Parallel 並非多執行緒,而是**單執行緒輪詢各分支任務佇列**,依序執行可執行節點,遇阻塞 (Delay 未到期、書籤等待) 則跳過下一分支。

Parallel 輪詢機制

Delay ≠ Thread.Sleep (關鍵證明)

實驗 1:Thread.Sleep 在 Parallel 中 - 兩分支各 Sleep 10秒,總耗時 20 秒 (串行累加)。ThreadSleepParallel 20秒結果

實驗 2:Delay 在 Parallel 中 - 兩分支各 Delay 10秒,總耗時 **10 秒** (並行等待)。DelayParallel 10秒結果

結論:Delay 釋放執行緒並註冊計時器回呼,Parallel 輪詢時發現分支閒置即跳過,實現真正並行等待效果。

WorkflowInvoker vs WorkflowApplication 執行緒差異

  • WorkflowInvoker:工作流附加在**呼叫端執行緒**同步執行,前一實例未完成不會啟動下一個。Invoker 串行
  • WorkflowApplication:工作流在**執行緒池執行緒**非同步執行,多實例真正並行。Application 並行

InvokeMethod 呼叫非同步方法 (APM 模式)

設定 RunAsynchronously=True,需提供 Begin方法名/End方法名 配對。關鍵在 IAsyncResult.CompletedSynchronously 回傳值:

  • false:InvokeMethod 等待非同步操作完成才繼續 (真正非同步) 等待完成
  • true:InvokeMethod 同步調用 Begin/End,**不等待** 背景執行緒完成即繼續 不等待

RunAsynchronously=False:直接同步呼叫原方法。同步呼叫

範例下載:DelayAndThreadWorkflow.rar

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