首頁 >後端開發 >C++ >如何在.NET中實現非同步流程執行?

如何在.NET中實現非同步流程執行?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-05 03:44:40519瀏覽

How Can I Achieve Asynchronous Process Execution in .NET?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn