c# - 从 Threadpool 工作线程启动进程(并在需要时等待)

标签 c# process asynchronous threadpool

我有一个处理文件传输的应用程序。在某些情况下,我需要启动一些处理文件的前/后处理可执行文件。

所以事件的顺序(简而言之)是这样的:

  1. 创建工作线程
  2. Worker 意识到它需要在开始传输之前启动一个预处理可执行文件 启动预处理,工作人员等待...如果等待时间过长,传输将不会发生,线程应该正常结束
  3. 文件已传输
  4. Worker 意识到它需要在传输完成后启动一个后处理可执行文件
  5. 启动后处理,worker 不关心等待

基本上,我不关心传输发生后后处理可执行文件运行多长时间。因此,如果我从一个线程启动进程然后返回到池中,我是否应该预见到任何问题?


//后处理

        Process process = null;
        ProcessStartInfo psi = new ProcessStartInfo(executable, args);
        psi.UseShellExecute = true;

        try
        {
            process = Process.Start(psi);
            //The pre-process simply calls Process.WaitForExit(timeout value)
            launched = true;
        }
        catch (InvalidOperationException) { }
        catch (ArgumentException) { }
        catch (System.ComponentModel.Win32Exception) { }
        catch (System.IO.FileNotFoundException) { }

最佳答案

这完全没有错。

想想看:

  • 将线程返回到线程池实际上没有任何意义 - 线程仍然存在。
  • 进程不以任何方式依赖于它们的父线程或进程 - 进程可以生成子进程然后退出。

关于c# - 从 Threadpool 工作线程启动进程(并在需要时等待),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3260708/

相关文章:

c# - 这是一个糟糕的设计吗?

c# - 检查程序集中的类是否包含接口(interface)中的所有方法

java - 使用java在Linux中运行的程序列表

windows - 如何在 shell 脚本中关闭通过其参数定位的 Windows 进程?

Android如何在其他类中运行OnUiThread?

javascript - 无法以正确的方式在 Javascript 中实现异步 XMLHttpRequest

c# - 将多个值插入到sql数据库表中的一列中

c# - 为什么 Moq 看不到在 .Select 方法中调用此方法?

c - 这段代码中创建了多少个进程?

javascript - Node.js 等待 for 循环中的每次迭代