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; 
}; 

ответ

1

Обработчик "разгрузили" событие делает:

syncEvent.Set(); 

Это позволит ждать продолжения.

События не имеют приоритетов, вы получаете их в том порядке, в котором они происходят.

+0

syncEvent.Set() - насколько мне известно, это состояние события сигнализируется, позволяя продолжить один или несколько ожидающих потоков. Как это будет продолжаться? – immirza

+0

Ваш основной поток вызывает syncEvent.WaitOne(), и он сидит там, ожидая, пока другой поток вызовет функцию syncEvent.Set(), которая позволит продолжить основной поток. –

Смежные вопросы