私は、.NET Workflow Foundationをより良く理解しようとしています。特に、persist/unloadとresume機能がどのように機能するかを理解しています。アンロード後にワークフローが起動しないのはなぜですか?
私は非常に単純なアクティビティを作成し、それをWorkflowApplication
でホストしようとしました。私は、アイドル時にワークフローインスタンスを永続化する機能を使用する方法を学びたいと思います。
var store = new SqlWorkflowInstanceStore("......");
var identity = new WorkflowIdentity("MyAwesomeWorkflow", Version.Parse("1.0"), String.Empty);
var activity = new Sequence()
{
Activities =
{
new WriteLine() {Text = "hello"},
new Delay() {Duration = TimeSpan.FromSeconds(5)},
new WriteLine() {Text = "bye"},
}
};
var wfapp = new WorkflowApplication(activity, identity);
var resetEvent = new ManualResetEventSlim();
wfapp.InstanceStore = store;
wfapp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
{
Console.WriteLine("Persistable idle");
return PersistableIdleAction.Unload;
};
wfapp.Completed += delegate(WorkflowApplicationCompletedEventArgs eventArgs)
{
Console.WriteLine("completed");
resetEvent.Set();
};
wfapp.Run();
resetEvent.Wait();
Delay
活動を開始したときにワークフローがアンロードされますが、Delay
が終わったとき、それが再開されていません。だから私は、次のコードを書きました。私はWorkflow Foundationの専門家ではないので、私は間違ってAPIを使用しなければならないことを認識しています。私の同僚によると、Delay
が終了すると、ワークフローは自動的に起き上がり、実行を再開するはずです。
私はこのトピックについてthis MSDN articleを読んだことがありますが、この面を非常にうまく説明していないようです。
WorkflowApplicationの下で同じポーリングを実装
WorkflowServiceHost
適切なワークフローインスタンスを再開します)はアンロードされたワークフローを再開しません。手動で行う必要があります。 – Evk@エヴァークもう少し詳しく説明できますか? – Venemo
よく分かりません。 WorkflowServiceHostを使用すると、アンロードされたワークフローを再開できます。 WorkflowApplicationはできません。したがって、あなたのサンプルは意図どおりに動作します。 – Evk