По принцип искам да се уверя, че поле в клас (в този случай _changedPoller) е Disposed възможно най-рано, когато вече не е необходимо. Извиквам StopChangedPolling в метода Dispose на класа и когато възникнат определени събития. Кой е най-добрият безопасен начин за изхвърляне на поле само веднъж? Следният код добър ли е?
private void StopChangedPolling()
{
IDisposable changedPoller = Interlocked.CompareExchange(ref _changedPoller, null, _changedPoller);
if (changedPoller != null)
changedPoller.Dispose();
}
При второто извикване на това, _changedPoller е null и не се хвърля изключение, въпреки че в документацията се посочва, че ArgumentNullException се хвърля, ако адресът на location1 е нулев указател.
Interlocked.Exchange
вместоCompareExchange
. - person Kevin Gosse   schedule 18.06.2015