Мы пытаемся загрузить и возобновить рабочие процессы с задержкой. Я видел пример абсолютной задержки Microsoft для этого с использованием store.WaitForEvents и LoadRunnableInstance для загрузки рабочего процесса. Однако здесь рабочий процесс уже известен.
В нашем случае мы хотим, чтобы событие ожидало store.WaitForEvents через каждые, скажем, 5 секунд, чтобы проверить, существует ли работающий экземпляр, и если это так, только загружать и запускать этот / эти конкретные экземпляры. Есть ли способ узнать, какой экземпляр рабочего процесса готов.
Мы поддерживаем идентификатор рабочего процесса и связанный с ним xaml в нашей базе данных, поэтому, если бы мы могли знать идентификатор экземпляра рабочего процесса, мы могли бы сопоставить его с xaml, создать рабочий процесс и затем выполнить LOadRunnableInstance.
Любая помощь будет принята с благодарностью.
Пример Microsoft (абсолютная задержка)
public void Run(){
wfHostTypeName = XName.Get("Version" + Guid.NewGuid().ToString(),
typeof(WorkflowWithDelay).FullName);
this.instanceStore = SetupSqlpersistenceStore();
this.instanceHandle =
CreateInstanceStoreOwnerHandle(instanceStore, wfHostTypeName);
WorkflowApplication wfApp = CreateWorkflowApp();
wfApp.Run();
while (true)
{
this.waitHandler.WaitOne();
if (completed)
{
break;
}
WaitForRunnableInstance(this.instanceHandle);
wfApp = CreateWorkflowApp();
try
{
wfApp.LoadRunnableInstance();
waitHandler.Reset();
wfApp.Run();
}
catch (InstanceNotReadyException)
{
Console.WriteLine("Handled expected InstanceNotReadyException, retrying...");
}
}
Console.WriteLine("workflow completed.");
}
public void WaitForRunnableInstance(InstanceHandle handle)
{
var events=instanceStore.WaitForEvents(handle, TimeSpan.MaxValue);
bool foundRunnable = false;
foreach (var persistenceEvent in events)
{
if (persistenceEvent.Equals(HasRunnableWorkflowEvent.Value))
{
foundRunnable = true;
break;
}
}
if (!foundRunnable) {
Console.WriteLine("no runnable instance");
}
}
Спасибо
Anamika