private void AcquireTransferCancellationHandler(object _acquireNode, bool canceling) { LinkedListNode <Message> acquireNode = (LinkedListNode <Message>)_acquireNode; AsyncTransfer acquire = acquireNode.Value.transfer; if (acquire.TryLock()) { // To access shared mutable state we must acquire the lock lock (theLock) { pendingMessages.Remove(acquireNode); } // Release the resources associated with the async acquire. acquire.Dispose(canceling); // Complete the TaskCompletionSource to RanToCompletion (timeout) // or Canceled final state. if (canceling) { acquire.SetCanceled(); } else { acquire.SetResult(false); } } }