J'essaie de mieux comprendre .NET Workflow Foundation, en particulier comment fonctionne la fonction de persistance/déchargement et reprise.Pourquoi le Workflow ne se réveille-t-il pas après avoir été déchargé?
Donc, à des fins de test, j'ai créé une activité très simple et j'ai essayé de l'héberger dans un WorkflowApplication
. Je voudrais apprendre à utiliser la possibilité de conserver les instances de workflow lorsqu'elles sont inactives. Donc, je l'ai écrit le code suivant:
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();
Le flux de travail est déchargé lorsque l'activité Delay
commence, mais il ne reprend pas lorsque le Delay
est terminée. Je ne suis pas un expert de la Workflow Foundation, donc je me rends compte que je dois utiliser l'API de manière incorrecte. Selon mes collégues, le flux de travail devrait automatiquement se réveiller et reprendre l'exécution lorsque le Delay
est terminé.
J'ai lu this MSDN article sur le sujet mais cela ne semble pas très bien expliquer cet aspect.
WorkflowApplication (contrairement à l'hôte de service) ne reprendra pas les workflows déchargés pour vous - vous devez le faire manuellement. – Evk
@Evk Pouvez-vous élaborer un peu plus? – Venemo
Eh bien pas sûr que je peux dire plus. Lorsque vous utilisez WorkflowServiceHost - il peut reprendre les workflows déchargés pour vous. WorkflowApplication ne peut pas, donc votre exemple fonctionne comme prévu, il n'y a rien de mal à vos côtés. – Evk