Как правильно расположить ручку

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

Но я видел разные способы распоряжаться 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();
 ....
}

1 ответ

Решение

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

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

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

Другие вопросы по тегам