Шах и ... пат

На днях пытался устранить предупреждение компилятора по использованию устаревших методов Thread.Suspend и Thread.Resume. Привожу его:

Thread.Suspend has been deprecated. Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources. ...”

Фрагмент кода, где используются устаревшие методы, выглядит приблизительно так:

//...
thread.Suspend();
try
{
StackTrace stackTrace = new StackTrace(thread, false);
//...
}
finally
{
thread.Resume();
}
//...

В MSDN-документации к конструктору StackTrace(Thread targetThread, bool needFileInfo) сказано, что передаваемый поток должен быть в состоянии Suspended, иначе возникнет ThreadStateException. Небольшой эксперимент подтвердил, что MSDN находится в актуальном состоянии :-). Интересно, что указанный конструктор не помечен как obsolete, и других способов получить трассировку стека (stack trace) для потока в .net 2.0 я не нашел.
Использование предлагаемых “Monitor, Mutex, Event, and Semaphore” приводит к тому, что поток переходит в состояние ThreadState.WaitSleepJoin, что никак не устроило StackTrace. Замечательная статья Managed Thread States из всеми любимого MSDN подтвердила мою догадку, что перевести поток в состояние Suspended можно только путем вызова метода Thread.Suspend. Такой вот трабл :-(.

Комментарии

Анонимный написал(а)…
Этот комментарий был удален администратором блога.
Анонимный написал(а)…
Эх, и что ж делать-то теперь? Прийдется давить warning, наверное... Иначе Warning As Error сделает свое черное дело.

Популярные сообщения из этого блога

Команды docker save/load, docker export/import – в чем отличие, как и когда ими пользоваться

Как узнать, кто заблокировал файл или папку

Эрик Гамма переходит на работу в Майкрософт