Re[5]: Почему в расте отсутствует выброс исключений?
От: Философ Ад http://vk.com/id10256428
Дата: 06.12.22 09:09
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

DE>Я так понимаю, что подробностей и примеров граблей не будет?..


А какие именно подробности тебе нужны? Незакрытых файлов, не освобождённых объектов синхронизации и инконсистентного состояния программы не достаточно? По-моему вполне. Потоки убивать нельзя!

Ф>>ЗЫ: точно такие же идиоты в шарпе https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.thread.abort?view=net-7.0

DE>В чём суть претензии? В наличии этого метода в принципе или в том, что аборт можно перехватить?

Странно, что ты только про этот метод спросил, а вот про TerminateThread() умолчал. Претензия в том, что эта дрянь может кинуть исключение там, где его изначально в принципе не предполагалось, а то что оно может прервать статический конструктор и прервать инициализацию статических полей класса — это дикий трэш. Просто представь себе, что у тебя инициализируется глобальный экземпляр какой-нибудь сложной хрени, и в этот момент прилетает ThreadAbort — всё, приплыли: ты потом в жизни не разберёшься почему программа погоду на Марсе добывает вместо того чтобы работать.
Там кроме того что ты можешь написать на эту тему в самой BCL попадается, например:
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    internal class Resources {
        
        private static global::System.Resources.ResourceManager resourceMan;
Если ResourceManager инициализировался наполовину, то программа корректно уже не будет работать.
Всё сказанное выше — личное мнение, если не указано обратное.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.