Многопоточность - стратегия Очистки в конце программы

Что лучший способ состоит в том, чтобы закончить многопоточное приложение в очевидном способе?
Я запускаю несколько сокетных соединений с основного потока в отдельных сокетах и ожидаю до конца моего рабочего дня в основном потоке и использовании в настоящее время System.Environment.Exit(0) завершать его.

Это приводит к необработанному исключению в одном из childs. Я должен остановить потоки из списка? Я отказался реализовать любую реальную остановку в childs все же, таким образом я задаюсь вопросом о лучшей практике. Сокеты все перенесены приятно с надлежащими деструкторами для того, чтобы выйти из системы и закрыться, но это все еще приводит к ошибкам.

5
задан user151019 11 May 2012 в 20:59
поделиться

3 ответа

Для потоков, созданных вручную, вы должны установить для свойства IsBackground значение true. В этом случае (если все ваши потоки, кроме основного) будут фоновыми, ваше приложение будет корректно закрыто после возврата из функции Main (string [] arg).

P.S. Все потоки пулов потоков являются фоновыми.

2
ответ дан 14 December 2019 в 13:33
поделиться

Всякий раз, когда вы выполняете длительное заблокированное ожидание (например, ожидаете входящего соединения), используйте форму Begin / End метода. Затем используйте ManualResetEvent для представления условия «должен выйти». Затем заблокируйте AsyncWaitHandle и событие выхода. Это позволит вам аккуратно завершить работу.

Пример:

// exit is a ManualResetEvent
var asyncResult = socket.BeginAccept(null, null);
if(WaitHandle.WaitAny(new[] { exit, asyncResult.AsyncWaitHandle }) == 0)
   return;
var connection = socket.EndAccept(asyncResult);

И в вашем основном методе, когда вы хотите выйти:

exit.Set();
0
ответ дан 14 December 2019 в 13:33
поделиться

прочтите статьи Джона Скита о многопоточности:

http://www.yoda.arachsys.com/csharp/threads/

, особенно «Изящное завершение рабочих потоков»:

http: / /www.yoda.arachsys.com/csharp/threads/shutdown.shtml

4
ответ дан 14 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: