protected override void OnFutureCompletedCore() { base.OnFutureCompletedCore(); lock (m_lock) { // Make sure to null out the thread. That way if someone calls cancel // long after the future completes an abort won't occur Interlocked.Exchange <Thread>(ref m_futureThread, null); } m_proxy.OperationFinished(); }