gpt4 book ai didi

c# - 同时运行给定数量的相同进程

转载 作者:行者123 更新时间:2023-11-30 19:16:53 27 4
gpt4 key购买 nike

我的情况很简单也很复杂。我正在尝试编写一个程序,它需要执行外部进程 1100 次,一次 4 次。我完全不知道如何去做这件事。我正在编写的应用程序是一个“Windows 窗体应用程序”,我正在利用 BackgroundWorker 异步运行任务。

例如,我有一个包含 1100 个不同字符串的列表,我想对每个字符串运行该过程 1 次,但一次只运行 4 个,然后继续进行下 4 个。

如有任何帮助,我们将不胜感激。

最佳答案

考虑以下代码:

private async void CodeOnUiThread()
{
//do ui stuff before starting
await ExecuteProcesses();
//do ui stuff after completing.
}

private async Task ExecuteProcesses()
{
await Task.Factory.StartNew(() =>
{
List<string> myStrings = GetMyStrings(); //or whatever you need
Parallel.ForEach(myStrings,
new ParallelOptions()
{
MaxDegreeOfParallelism = 4
}, (s) =>
{
var process = new Process();
process.StartInfo = new ProcessStartInfo("myProcess.exe", s);
process.Start();
process.WaitForExit();

});
});
}

这允许最多 4 个线程同时运行,因此不允许超过 4 个进程同时执行。

更新:

您还可以使用 Environment.ProcessorCount 获取核心数。但是,默认情况下,Parallel.ForEach 调用将正确处理此问题。

更新 2

Parallel.ForEach 会阻塞当前运行的线程。我已经更新了上面的代码。

关于c# - 同时运行给定数量的相同进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20997771/

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