public async Task DisableTwinLinksAsync(TimeSpan timeout) { Logging.Enter(this, timeout, nameof(DisableTwinLinksAsync)); Debug.Assert(_twinSendingLink != null); Debug.Assert(_twinReceivingLink != null); bool enteredSemaphore = await _twinLinksSemaphore.WaitAsync(timeout).ConfigureAwait(false); if (!enteredSemaphore) { throw new TimeoutException("Failed to enter the semaphore required for ensuring that AMQP twin sender and receiver links are closed."); } try { ICollection <Task> tasks = new List <Task>(); if (_twinReceivingLink != null) { tasks.Add(_twinReceivingLink.CloseAsync(timeout)); } if (_twinSendingLink != null) { tasks.Add(_twinSendingLink.CloseAsync(timeout)); } if (tasks.Count > 0) { await Task.WhenAll(tasks).ConfigureAwait(false); _twinReceivingLink = null; _twinSendingLink = null; } } finally { Logging.Exit(this, timeout, nameof(DisableTwinLinksAsync)); _twinLinksSemaphore.Release(); } }
public async Task DisableMethodsAsync(TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, timeout, $"{nameof(DisableMethodsAsync)}"); } Debug.Assert(_methodSendingLink != null); Debug.Assert(_methodReceivingLink != null); try { ICollection <Task> tasks = new List <Task>(); if (_methodReceivingLink != null) { tasks.Add(_methodReceivingLink.CloseAsync(timeout)); } if (_methodSendingLink != null) { tasks.Add(_methodSendingLink.CloseAsync(timeout)); } if (tasks.Count > 0) { await Task.WhenAll(tasks).ConfigureAwait(false); _methodReceivingLink = null; _methodSendingLink = null; } } finally { if (Logging.IsEnabled) { Logging.Exit(this, timeout, $"{nameof(DisableMethodsAsync)}"); } } }
public async Task DisableMessageReceivingLinkAsync(TimeSpan timeout) { Logging.Enter(this, timeout, nameof(DisableMessageReceivingLinkAsync)); Debug.Assert(_messageReceivingLink != null); bool enteredSemaphore = await _messageReceivingLinkSemaphore.WaitAsync(timeout).ConfigureAwait(false); if (!enteredSemaphore) { throw new TimeoutException("Failed to enter the semaphore required for ensuring that AMQP message receiver links are closed."); } try { await _messageReceivingLink.CloseAsync(timeout).ConfigureAwait(false); } finally { _messageReceivingLinkSemaphore.Release(); Logging.Exit(this, timeout, nameof(DisableMessageReceivingLinkAsync)); } }