Как правильно расположить ручку
Я делаю многопоточность и использую 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
, Не делай этого сам.