Прерывание задачи, которая внутри создает новый поток, вызывает исключение UnhandledException.

Я пытаюсь прервать задачу, которая внутри создает поток. Проблема в том, что внутренний поток пытается получить доступ к ресурсу, который уже удален (поскольку родительская задача уже отменена), и это вызывает необработанное исключение.

Код, который создает поток, представляет собой «черный ящик», внешнюю DLL, поэтому я не могу передать ему CancellationToken или около того.

Что я могу сделать, чтобы задача прервала свои внутренние потоки? Или какой выход из этой ситуации?

Спасибо


person imriqwe    schedule 11.11.2012    source источник
comment
Потоки в TPL управляются планировщиком, и он получает потоки из пула. Если ваша задача создает новый поток внутренне, ваш черный ящик должен предоставлять API для управления/управления его потоками.   -  person Hamlet Hakobyan    schedule 11.11.2012


Ответы (1)


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

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

person Mike Parkhill    schedule 11.11.2012
comment
Я пытаюсь реализовать тайм-аут - я готов остановить программу через определенное время. Для этого я выполняю программу в другой задаче, а затем останавливаю ее из основного потока. Есть ли лучший способ реализовать это? - person imriqwe; 12.11.2012
comment
Если вы запустите его в другой задаче, вы можете вызвать task.Wait(timespan), и он истечет по истечении определенного периода времени. - person Mike Parkhill; 12.11.2012