0

私は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() - これは、イベントの状態をシグナルに設定し、1つまたは複数の待機中のスレッドを続行できるようにするためです。それはどのように待っていますか? – immirza

+0

あなたのメインスレッドはsyncEvent.WaitOne()を呼び出し、別のスレッドがsyncEvent.Set()を呼び出すまで待機してメインスレッドを進めます。 –

関連する問題