Запустить процесс из рабочего потока Threadpool (и подождать при необходимости) - PullRequest
1 голос
/ 16 июля 2010

У меня есть приложение, которое обрабатывает передачу файлов.В некоторых случаях мне нужно запустить некоторые исполняемые файлы до / после обработки, которые работают с файлами.

Таким образом, порядок событий (вкратце) будет таким:

  1. Рабочий поток создан
  2. Рабочий понимает, что ему нужно запустить исполняемый файл предварительного процесса перед началом передачи Предварительный процесс запущен, рабочий ждет ... если он ждет слишком долго, передача не произойдет, и поток не будет выполнендолжно завершиться изящно
  3. Файл передан
  4. Рабочий понимает, что ему нужно запустить исполняемый файл пост-процесса после завершения передачи
  5. Запущен пост-процесс, работник нене нужно ждать

По сути, мне все равно, сколько времени исполняется исполняемый файл после процесса после передачи.Следовательно, следует ли ожидать каких-либо проблем, если я запускаю процесс из потока, который затем возвращается в пул?


// Пост-процесс

        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) { }

Ответы [ 2 ]

5 голосов
/ 16 июля 2010

В этом нет ничего плохого.

Подумайте об этом:

  • Возвращение потока в пул потоков на самом деле ничего не значит - поток все еще там.
  • Процессы никоим образом не зависят от их родительских потоков или процессов - процесс может порождать дочерний процесс и затем завершаться.
1 голос
/ 16 июля 2010

Это очень опасно. Если вы используете все свои потоки пула потоков на долго выполняющиеся задачи, другие вещи, которые нуждаются в них, перестанут работать. Вы даже можете заблокировать все приложение целиком.

Правило простое:

  • Коротко и быстро: Thread Thread Thread
  • Длинная и медленная: созданная вручную нить
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...