override public IAsyncResult BeginCompareSwap(MemBlock key, MemBlock new_value, MemBlock old_value, AsyncCallback cb, object state) { MemBlock old_v = null; lock( _sync ) { old_v = _ht[key] as MemBlock; if ( (old_v == null) && (old_value == null)) { //Looks good: _ht[key] = new_value; } else if( old_v.Equals(old_value) ) { //Use Equals method to check for equality _ht[key] = new_value; } } IAsyncResult r = new LhtAsResult(state, old_v); cb(r); return r; }