[Ссылка] О вреде метода Thread.Abort
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 17.01.11 18:30
Оценка: 92 (8)
Здесь часто в предложениях прокомментировать свой код, да и просто в разных фрагментах опубликованного кода проскакивают вызовы методов Thread.Abort для завершения работы вновь созданного потока. На самом деле, это является не самой удачной практикой и существует масса способов получить "неожиданное" состояние приложения. На самом деле, это верный способ получить рассогласованное состояние приложения, дедлоки и утечки ресурсов.
В общем, если интересно — велкам: "О вреде метода Thread.Abort".
Re: [Ссылка] О вреде метода Thread.Abort
От: Sinix  
Дата: 18.01.11 04:26
Оценка:
Здравствуйте, SergeyT., Вы писали:

ST>Здесь часто в предложениях прокомментировать свой код, да и просто в разных фрагментах опубликованного кода проскакивают вызовы методов Thread.Abort для завершения работы вновь созданного потока...


В догонку — тема на StackOverflow:
http://stackoverflow.com/questions/3923457/is-cs-using-statement-abort-safe

Самая гадость, что и Thread.Abort, и Thread.ResetAbort используются самими фреймворком, особенно в System.Web. А ещё из-за этих нехороших людей приходится писать

lockInvoker.Invoke(() => DoSomething(strange));

вместо

using(new NonReentrantLock(lockKey))
{
  // ...
}
Re: [Ссылка] О вреде метода Thread.Abort
От: Nikolay_P_I  
Дата: 18.01.11 06:12
Оценка:
Здравствуйте, SergeyT., Вы писали:

ST>Здесь часто в предложениях прокомментировать свой код, да и просто в разных фрагментах опубликованного кода проскакивают вызовы методов Thread.Abort для завершения работы вновь созданного потока. На самом деле, это является не самой удачной практикой и существует масса способов получить "неожиданное" состояние приложения. На самом деле, это верный способ получить рассогласованное состояние приложения, дедлоки и утечки ресурсов.

ST>В общем, если интересно — велкам: "О вреде метода Thread.Abort".

Я чего-то не понимаю или такая запись:

var file = File.OpenWrite(fileName);
try
{
    // Записываем информацию в файл
}
finally


вместо

FileStream file = null;
try
{
    file = File.OpenWrite(fileName);
    // Записываем информацию в файл
}
finally


Сама по себе — верный путь к граблям неисполненного finally даже без учета Thread.Abort() ?
Re[2]: [Ссылка] О вреде метода Thread.Abort
От: Sinix  
Дата: 18.01.11 06:31
Оценка:
Здравствуйте, Nikolay_P_I, Вы писали:

Даже
FileStream file = null;
try
{
    file = File.OpenWrite(fileName);
    // Записываем информацию в файл
}
finally


Не сработает — ThreadAbortException может произойти внутри OpenWrite (после нативной OpenFile и до возвращения результата). Или после OpenWrite и перед сохранением результата в переменную.

Тут ничего страшного — GC всё подберёт, а вот для управления глобальным состоянием using-и лучше не использовать.
Re: [Ссылка] О вреде метода Thread.Abort
От: Pro100Oleh Украина  
Дата: 18.01.11 07:47
Оценка: +1
Здравствуйте, SergeyT., Вы писали:

Начиная с .Net Framework 4.0 эта ситуация наконец-то исправлена и оператор lock(syncRoot) разворачивается компилятором таким образом ...

Здесь я бы добавил одно слово.
Pro
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.