gpt4 book ai didi

c# - 等待多个进程完成

转载 作者:行者123 更新时间:2023-11-30 19:09:23 26 4
gpt4 key购买 nike

我希望我的程序等待所有进程完成,然后删除一些临时文件。我已经有一段代码可以在一次处理一个进程时执行此操作,但我无法使其适用于多个进程。

我将从展示有效的代码开始。此代码正确运行一个进程,等待它完成,然后删除临时文件:

foreach (string script in scriptList)
{
ProcessStartInfo myProcess = new ProcessStartInfo();
myProcess.FileName = accoreconsolePath;
myProcess.Arguments = "/s \"" + script + "\"";
myProcess.CreateNoWindow = true;
Process myWait = Process.Start(myProcess);
myWait.WaitForExit();

File.Delete(script);
}

上面的内容巧妙地包含在 foreach 循环中。我无法工作的是它的一个并行版本,其中 wait 语句在 foreach 循环之外:

  Process myWait;
foreach (string script in scriptList)
{
ProcessStartInfo myProcess = new ProcessStartInfo();
myProcess.FileName = accoreconsolePath;
myProcess.Arguments = "/s \"" + script + "\"";
myProcess.CreateNoWindow = true;
myWait = Process.Start(myProcess);
}
myWait.WaitForExit(); //error: use of unassigned local variable "myWait"
//delete file would go here

我想我只需要在进入foreach 循环之前初始化myWait,但我不知道该怎么做。如何在不将其分配给任何东西的情况下初始化进程?还有其他一些简单的方法可以做到这一点吗?

最佳答案

不确定这种方法是否出现在评论中的任何链接问题中,但这里有一个使用了 List<Task>Task.WaitAll() :

List<Task> tasks = new List<Task>();            
foreach (string script in scriptList)
{
string tmpScript = script;
tasks.Add(Task.Run(delegate {
ProcessStartInfo myProcess = new ProcessStartInfo();
myProcess.FileName = accoreconsolePath;
myProcess.Arguments = "/s \"" + tmpScript + "\"";
myProcess.CreateNoWindow = true;
Process.Start(myProcess).WaitForExit();
File.Delete(tmpScript);
}));
}
Task.WaitAll(tasks.ToArray());

关于c# - 等待多个进程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com