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

WF4.0 基礎篇(21):WorkflowInvoker 同步執行工作流的多種調用模式

     編輯:關於.NET

WorkflowInvoker 是 WF4.0 最輕量的工作流啟動器,特點:工作流附加在宿主執行緒上同步執行。這與使用執行緒池非同步執行的 WorkflowApplication 形成鮮明對比。本文詳細展示其靜態/實例、同步/非同步等多種調用模式。

執行緒模式差異

執行緒模式對比

  • WorkflowInvoker:工作流在呼叫端執行緒同步跑完,適合短流程、測試、單元測試
  • WorkflowApplication:工作流在背景執行緒池執行,支援書籤、持久化、長期執行、非同步通知

靜態方法調用 (一行搞定)

// 有回傳值活動
int result = WorkflowInvoker.Invoke(new AddActivity(), new Dictionary<string,object> {{"X",1},{"Y",2}});
// 取得 OutArgument
var outputs = WorkflowInvoker.Invoke(new TestWorkflow(), inputs);
// 同時取得回傳值與 OutArgument
var outputs2 = new Dictionary<string,object>();
int result2 = WorkflowInvoker.Invoke(new ResultAndOutActivity(), inputs, out outputs2, TimeSpan.Zero);

結果展示:回傳值結果 OutArgument 結果 回傳值+OutArgument

實例方法調用 (靈活控制)

實例模式下,回傳值與 OutArgument 統一在 Dictionary 中回傳 (Key 為 "Result" 或參數名)。

var invoker = new WorkflowInvoker(new AddActivity());
var resultDict = invoker.Invoke(inputs);  // 包含 Result
foreach (var kv in resultDict) Console.WriteLine(kv);

結果:實例模式結果 OutArgument 結果

非同步調用模式

  1. 事件式 (APM):InvokeAsync + InvokeCompleted 事件 事件式非同步結果
  2. Begin/End 模式:BeginInvoke + EndInvoke + AsyncCallback Begin/End 結果

整合追蹤

var invoker = new WorkflowInvoker(wf);
invoker.Extensions.Add(myTrackingParticipant);
invoker.Invoke(inputs);

範例下載:WorkflowInvokerSample.rar

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