Остановка выполнения потока или задачи в избранное  новое ответить всё   подписка   модер. 
От: Степанов Андрей 
Дата: 04.02.12 12:09
Добрый день!
В процессе написания многопоточного приложения возникло несколько вопросов, надеюсь кто-нибудь сможет мне помочь в них разобраться:
1) Во многих источниках настоятельно не рекомендуют пользоваться методом Thread.Abort для завершения потока. Причем аргументация достаточно абстрактная: "не делайте, а то мало ли чего". Насколько я понимаю, Thread.Abort инициирует выбрасывание специального исключения (с автоматическим перевыбрасыванием после обработки). Чего в нем такого страшного? Исключение выбрасывается не совсем всегда — в процессе сетевого ввода\вывода, например, оно не выбросится. То есть нельзя назвать его совсем уж чем-то монструозным. Ресурсы вроде как GC освобождает, блоки finally исключение не обходит. Чего в нем плохого?
2) Попробовал использовать класс Task для выполнения задач. Все хорошо, за исключением одного — остановки выполнения. Я так понимаю, для класса Task есть понятие "отмены" задачи, которое предполагает проверку в коде задачи необходимости ее отменить. Концепция хорошая, конечно, но у меня несколько тысяч строк кода, которые качают данные из разных источников, разбирают их и еще чего-то там делают. Неужели по всему коду надо вставлять эти проверки на необходимость завершения задачи? А если не дай бог я неверно оценю потенциально опасные места и не поставлю куда надо проверку, то все — задача отработает столько, сколько ей захочется? Или, может быть, я неправильно понимаю концепцию "отмены" задачи?