Практическое руководство располагает waithandle правильно

Я делаю некоторую многопоточность и использование, AutoResetEvents и ManualResetEvents действительно управляют моим основным - цикл. Когда "destryoing" потоки, я также должен расположить эти сигналы, это ясно.

Но я видел различные пути, как расположить Waithandles, и я не уверен, какой корректен:

Версия 1

if (disposing)
{
 this.threadExitEvent.SafeWaitHandle.Dispose();
 this.threadExitEvent.Close();
 this.threadExitEvent = null;
 ....
}

Версия 2

if (disposing)
{
 this.threadExitEvent.Close();
 this.threadExitEvent = null;
 ....
}

Версия 3

if (disposing)
{
 this.threadExitEvent.Close();
 ....
}
5
задан TomTom 27 April 2010 в 14:37
поделиться

1 ответ

Я бы выбрал версию 2, так как (по-видимому) нет необходимости держать ваш недавно удаленный WaitHandle , поэтому рекомендуется установить для него значение null . Это также упрощает адаптацию вашего объекта к возможности восстановления после удаления, поскольку все, что вам нужно сделать, это проверить, является ли WaitHandle нулевым, и воссоздать его, если это так.

Тем не менее, никто не собирается давать вам пощечину за то, что вы выбрали вариант 3.

Не используйте вариант 1; как правило, плохая идея «залезть внутрь» объектов и начать избавляться от членов.Вызов Close (поскольку метод Dispose из IDisposable реализован явно и имеет код, идентичный Close ), автоматически выполняется удаление SafeWaitHandle . Не делай этого сам.

6
ответ дан 14 December 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: