Я делаю некоторую многопоточность и использование, 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();
....
}
Я бы выбрал версию 2, так как (по-видимому) нет необходимости держать ваш недавно удаленный WaitHandle
, поэтому рекомендуется установить для него значение null
. Это также упрощает адаптацию вашего объекта к возможности восстановления после удаления, поскольку все, что вам нужно сделать, это проверить, является ли WaitHandle
нулевым, и воссоздать его, если это так.
Тем не менее, никто не собирается давать вам пощечину за то, что вы выбрали вариант 3.
Не используйте вариант 1; как правило, плохая идея «залезть внутрь» объектов и начать избавляться от членов.Вызов Close
(поскольку метод Dispose
из IDisposable
реализован явно и имеет код, идентичный Close
), автоматически выполняется удаление SafeWaitHandle
. Не делай этого сам.