.NET での非同期プロセスの実行
Process.Start() メソッドを使用すると、プログラマは外部アプリケーションまたはバッチ ファイルの実行を開始できます。ただし、非同期サポートがありません。この制限は、async/await パターンを利用するコンソール アプリケーションを操作する場合に不便になる可能性があります。
幸いなことに、非同期プロセスの実行を実現するための回避策があります。 Process.Start() は単にプロセスを開始しますが、後続の実行は async/await パラダイムの外で処理されます。
プロセスの完了を待たずに単にプロセスを開始するだけの場合は、次のアプローチを使用できます。 :
void async RunCommand() { await Task.Run(() => Process.Start("command to run")); }
ただし、目的の動作にプロセスの終了を非同期で待機することが含まれる場合、Exited イベントと TaskCompletionSource は
static Task<int> RunProcessAsync(string fileName) { var tcs = new TaskCompletionSource<int>(); var process = new Process { StartInfo = { FileName = fileName }, EnableRaisingEvents = true }; process.Exited += (sender, args) => { tcs.SetResult(process.ExitCode); process.Dispose(); }; process.Start(); return tcs.Task; }
上記の手法を使用すると、メインスレッドはプロセスが完了するまで非同期的に待機できるため、他の非同期操作とのシームレスな統合が可能になります。
以上が.NET で非同期プロセスの実行を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。