Вопрос

Я делаю несколько многопоточных и использования AutoResetevents и ManualResetevents, управляют моим основным циклом. Когда «Destryoing» нити я также должен распоряжаться этим сигналами, это ясно.

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

Версия 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. Отказ Не делай этого самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top