.NET 中的异步进程执行
Process.Start() 方法允许程序员启动外部应用程序或批处理文件的执行,但缺乏异步支持。在使用使用异步/等待模式的控制台应用程序时,此限制可能会带来不便。
幸运的是,有一些解决方法可以实现异步流程执行。虽然 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中文网其他相关文章!