public ulong CompareExchange(ulong value, ulong comparand) { long comparand_ = Calculate (comparand); long value_ = Calculate (value); long original = Interlocked.CompareExchange (ref _value, value_, comparand_); if (original.Equals (comparand_)) return comparand; else return Calculate (original); }