При прерывании выполнения потока я всегда сомневаюсь между изящным выходом с обработчиком событий, подобным этому:
int result = WaitHandle.WaitAny(handles);
if (result = WAIT_FINALIZE)
FinalizeAndExit();
и, используя событие для обозначения потока, оно должно завершиться
или просто обработка исключения ThreadAbortException для завершения потока ...
try
{
// Main execution
}
catch(ThreadAbortException e)
{
// FinalizeAndExit();
}
finally
{
}
Я обычно склонен использовать подход ThreadAbortException, поскольку он может быть обработан, но он повторно вызывается в конце блока catch, и это также предотвращает поддержание потока «предательскими» методами, но Я видел оба подхода.
Каково ваше мнение? Есть ли ситуации, когда лучше использовать один над другим, или лучше всегда использовать подход к x?