一尘不染

是否存在与Process.Start异步的等效项?

c#

就像标题所示,是否有Process.Start我可以等待的等效项(允许您运行其他应用程序或批处理文件)?

我正在玩一个小型控制台应用程序,这似乎是使用async和await的理想场所,但是我找不到这种情况的任何文档。

我在想的是以下几方面的东西:

void async RunCommand()
{
    var result = await Process.RunAsync("command to run");
}

阅读 256

收藏
2020-05-19

共1个答案

一尘不染

Process.Start()仅启动该过程,它不会等到完成为止,因此进行该过程没有多大意义async。如果您仍然想这样做,可以执行await Task.Run(() => Process.Start(fileName))

但是,如果您要异步等待过程完成,则可以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;
}
2020-05-19