0
Если у меня есть следующие «События жизненного цикла Workflow» в моем program.cs
.События жизненного цикла рабочего процесса (WF)
Не можете понять, что WaitOne()
будет ожидать получения сигнала?
Имеет ли Completed
наивысший приоритет или idle
имеет наивысший приоритет или любой другой сигнал, который он получит?
app.Run();
syncEvent.WaitOne();
app.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
{
return PersistableIdleAction.Unload;
};
app.Unloaded = delegate(WorkflowApplicationEventArgs e)
{
Console.WriteLine("Workflow {0} Unloaded.", e.InstanceId);
syncEvent.Set();
};
app.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{
if (e.CompletionState == ActivityInstanceState.Faulted)
{
Console.WriteLine("Workflow {0} Terminated.", e.InstanceId);
Console.WriteLine("Exception: {0}\n{1}",
e.TerminationException.GetType().FullName,
e.TerminationException.Message);
}
else if (e.CompletionState == ActivityInstanceState.Canceled)
{
Console.WriteLine("Workflow {0} Canceled.", e.InstanceId);
}
else
{
Console.WriteLine("Workflow {0} Completed.", e.InstanceId);
}
};
app.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
{
Console.WriteLine("Workflow {0} Aborted.", e.InstanceId);
Console.WriteLine("Exception: {0}\n{1}",
e.Reason.GetType().FullName,
e.Reason.Message);
};
app.Idle = delegate(WorkflowApplicationIdleEventArgs e)
{
Console.WriteLine("Workflow {0} Idle.", e.InstanceId);
};
app.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
{
Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
e.InstanceId, e.UnhandledException.Message);
Console.WriteLine("ExceptionSource: {0} - {1}",
e.ExceptionSource.DisplayName, e.ExceptionSourceInstanceId);
return UnhandledExceptionAction.Terminate;
};
syncEvent.Set() - насколько мне известно, это состояние события сигнализируется, позволяя продолжить один или несколько ожидающих потоков. Как это будет продолжаться? – immirza
Ваш основной поток вызывает syncEvent.WaitOne(), и он сидит там, ожидая, пока другой поток вызовет функцию syncEvent.Set(), которая позволит продолжить основной поток. –