gpt4 book ai didi

c# - .Net Core C# 将方法/类作为子进程执行

转载 作者:行者123 更新时间:2023-12-03 09:51:23 24 4
gpt4 key购买 nike

出于内存隔离和稳定性的原因,我需要将一些方法/类作为子进程而不是线程来执行。我发现以下库允许我这样做:https://github.com/tmds/Tmds.ExecFunction .

但是,我似乎无法找到一种方法来获取子进程的进程ID。

ExecFunction.Run(() => new NewSubProcessClass());

上面的代码将生成一个新进程,甚至会在 Linux Docker 容器中生成控制台输出。问题是,我没有进程 ID。

public static Process Start(Action action, Action<ExecFunctionOptions> configure = null);

我上面引用的方法看起来应该可以解决问题,但是,当我替换

ExecFunction.Run(() => new NewSubProcessClass());

Process process = ExecFunction.Start(() => new NewSubProcessClass());

我不再获得任何控制台输出。

更新 0:

来自@bazzilic 的建议

process.WaitForExit();

是问题的解决方案。

最佳答案

如果您检查 Tmds.ExecFunction 的源代码, 两种方法 .Run(...) ( here ) 和 .Start(...) ( here ) 在后台调用相同的私有(private)方法 .Start(...) (来源here)。这两个区别是:

  1. 公众.Start(...)方法返回 process私有(private)返回的元组中的对象 .Start(...)方法而 .Run(...)没有;
  2. .Run(...)方法也供应waitForExit: true在参数中。

在私有(private)代码中.Start(...)方法,有this portion :

if (waitForExit)
{
process.WaitForExit();
}

除此之外,这两个公共(public)方法是相同的。您的代码行为的差异很可能是由于没有等待子进程在您的父进程中完成。试试这个:

Process process = ExecFunction.Start(() => new NewSubProcessClass());
process.WaitForExit();

PS:请记住 ProcessIDisposable ,所以可能会更好

using ( Process process = ExecFunction.Start(() => new NewSubProcessClass()) ) {
process.WaitForExit();
}

关于c# - .Net Core C# 将方法/类作为子进程执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65811573/

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