public async Task <MessageAttemptInfo> WaitAsync(TimeSpan timeout)
            {
                if (!await _tcs.Task.AwaitWithTimeout(timeout))
                {
                    if (_strategy.RemoveAdder(this) && _exception == null)
                    {
                        _exception = new TimeoutException(SR.Format(SR.TimeoutOnAddToWindow, timeout));
                    }
                }

                if (_exception != null)
                {
                    _attemptInfo.Message.Close();
                    _tcs.TrySetResult(null);
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(_exception);
                }

                // This is safe because, Abort, Complete0, Fault, and RemoveAdder all occur under
                // the TransmissionStrategy's lock and RemoveAdder ensures that the
                // TransmissionStrategy will never call into this object again.
                _tcs.TrySetResult(null);
                return(_attemptInfo);
            }