Прерывание потока в .NET - PullRequest
       13

Прерывание потока в .NET

4 голосов
/ 01 февраля 2010

У меня есть поток, который анализирует файл и делает транзакционные вызовы в базу данных, каждая транзакция имеет запись аудита как часть своей транзакции. Что-то совершенно не так с вызовом Thread.Abort (), чтобы остановить обработку файла? Вместо того, чтобы разбрасывать уродливые безопасные места повсюду?

Файл будет закрыт после вызова Abort.

Ответы [ 3 ]

10 голосов
/ 02 февраля 2010

Очевидной проблемой будет риск отказа от транзакции, что может привести к блокировке на неопределенное время (или до истечения времени ожидания). Но вы можете оставить все сортировки в беспорядке - невосстановимые Monitor блокировки, семафоры и т. Д., Утечки памяти и т. Д.

Вкратце: старайтесь изо всех сил избегать прерывания потока, если вы не знаете точно , что он делает в данный момент. И единственный способ узнать, что он делает, - это если он уже находится в известном «безопасном месте» (если использовать ваш термин) - так что вы можете просто сгенерировать исключение или что-то и позволить ему поднять себя управляемым способом. .

8 голосов
/ 02 февраля 2010

Лучшая практика: прерывать поток, только когда вы прерываете процесс.

0 голосов
/ 14 августа 2011

Попробуйте Thread.Interrupt (), чтобы заставить поток выйти из состояния ожидания.

Страница MSDN

...