.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中文網其他相關文章!