1

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

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

  1. 工作线程已创建
  2. Worker 意识到它需要在开始传输之前启动一个预处理可执行文件 启动预处理,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) { }
4

2 回答 2

5

这完全没有错。

想一想:

  • 将线程返回到线程池实际上并不意味着什么——线程仍然存在。
  • 进程不以任何方式依赖于它们的父线程或进程——进程有可能产生一个子进程然后退出。
于 2010-07-15T23:01:18.480 回答
1

这是非常危险的。如果您在长时间运行的任务上用完所有线程池线程,那么其他需要它们的东西将停止工作。您甚至可以死锁整个应用程序。

规则很简单:

  • 短而快:线程池线程
  • 长而慢:手动创建线程
于 2010-07-15T23:05:50.043 回答