1

これはシナリオです:

ManualWorkflowSchedulerを使用したステート マシン ワークフローがあります。State1State2の 2 つの状態があるとします。State1 には、ワークフローを State1 から State2 に移動するSetStateActivity1を持つEventDrivenActivity1が含まれています。State1 には StateFinalizationActivity1 もあります。

だから私の質問は:

イベントが発生し、SetStateActivity1 が実行され、ワー​​クフローの状態が State2 に変更されると、StateFinalizationActivity1 は、状態変更を引き起こすイベントを発生させたメソッドと同じスレッドで (呼び出しの一部として) 実行されます (つまり、呼び出し元のメソッドはEventDrivenActivity1 と StateFinalizationActivity1 の両方のシーケンスが実行されるまで待機するか、または EventDrivenActivity1 が実行された後に戻り、StateFinalizationActivity1 が戻り後に実行されます)?

4

2 に答える 2

1

「ファイナライゼーション」という言葉を使用すると、別のスレッドで実行される CLR ファイナライゼーションを考える人がいるかもしれません。ただし、これは非常に異なる概念です。

SetStateActivity がヒットすると、次のシーケンスが発生します:-

  • 現在の状態で現在実行中の他のアクティビティは、キャンセル処理ですべてのアクティビティを実行します。
  • StateFinalization のアクティビティが実行されます
  • 状態は新しい状態に遷移します
  • 新しい状態のすべてのアクティビティ 初期化アクティビティが実行されます
  • 状態本体のイベント アクティビティが入力されます。

上記のすべては、現在のスレッドで順番に実行されます。

于 2009-11-20T12:09:56.243 に答える
1

ManualWorkflowScheduler を使用すると、実行可能なすべてのものが現在のスレッドで実行されます。そのため、ワークフローは次の状態になってアイドル状態になるまで継続して実行されます。

于 2009-11-20T10:27:02.470 に答える