プロセスが終了するのを待ってからアクションを実行するメソッドを書きたいと思います。以下の最初のドラフトには競合状態があり、Exited
イベントをチェックした後にプロセスが終了した場合、アクションは決して実行されません。このメソッドを正しく書き直す最も雄弁な方法は何ですか?
private void MonitorProcess(int processId, Action doOnExit)
{
Process process = Process.GetProcessById(processId);
if (process.HasExited)
{
doOnExit();
}
else
{
process.EnableRaisingEvents = true;
process.Exited += delegate { doOnExit(); };
}
}