Parallel 活動的非真正多執行緒並行模型SynchronizationScope 解決共享資料存取與臨界區問題ConditionedActivityGroup (CAG) 實作條件驅動的並行排程Parallel 是組合活動,僅接受 Sequence 子活動(至少兩個)。**子活動不在獨立執行緒**,WF 在單一執行緒上輪流執行各分支的單一活動單元(原子活動完成前不切換)。執行順序看似隨機實為確定性(左→右、上→下),**但業務邏輯必須假設真隨機並行**。
Delay 活動僅阻塞所在分支,其他分支持續執行。
並行分支共享變數 _msg 輸出「Hello, World!」與「The quick brown fox...」導致字串交錯。
將每分支的輸出代碼包裹在 SynchronizationScope 中,設定相同 SynchronizationHandles = "SyncLock"。機制類似 Mutex:同一 Handle 的 Scope 同一時間僅有一個可進入,強制臨界區原子執行,確保輸出順序完整。
// 左分支
_msg = "Hello, "; PrintMessage();
_msg = " World!\n"; PrintMessage();
// 右分支
_msg = "The quick brown fox"; PrintMessage();
_msg = " jumps over the lazy dog.\n"; PrintMessage();
執行後輸出不再交錯,證明同步有效。
true 結束 CAG四個自定義子活動:
SetLevel:WhenCondition=AlwaysExecute,綁定 TankLevel 屬性,Invoked 重置通知旗標Stop:WhenCondition=AlwaysExecute,Invoked 設定 _stop=true 觸發 UntilConditionUnderfillAlert:WhenCondition=CheckEmpty(液位 ≤ 下限且未通知過),綁定 TankLevelOverfillRelease:WhenCondition=CheckOverfill(液位 ≥ 上限且未通知過),綁定 TankLevelUntilCondition=CheckContinue 返回 _stop。滑桿調整液位,UI 即時顯示「低液位警告」或「高液位釋放」,且同一狀態僅通知一次。
若用 While+IfElse 實現需大量巢狀活動,CAG 以聲明式條件簡化邏輯,且天然支援並行子活動獨立排程。**當順序工作流需要狀態機式的條件觸發行為時,CAG 是輕量替代方案**,無需建立獨立 State Machine 工作流。
Parallel:簡單並行,無共享資料時首選SynchronizationScope:共享資料/臨界區同步,Handle 機制輕量易用CAG:複雜條件驅動並行排程,適合監控、輪詢、多條件觸發場景