public void Cancel() { if (Interlocked.Exchange(ref requested, long.MinValue) != long.MinValue) { node = parent.DeadNode; parent.Remove(this); } }