public async Task EnableMethodsAsync(TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, timeout, $"{nameof(EnableMethodsAsync)}"); } try { Debug.Assert(_methodSendingLink == null); Debug.Assert(_methodReceivingLink == null); string correlationIdSuffix = Guid.NewGuid().ToString(); Task <AmqpIoTReceivingLink> receiveLinkCreator = _amqpIoTSession.OpenMethodsReceiverLinkAsync(_deviceIdentity, correlationIdSuffix, timeout); Task <AmqpIoTSendingLink> sendingLinkCreator = _amqpIoTSession.OpenMethodsSenderLinkAsync(_deviceIdentity, correlationIdSuffix, timeout); await Task.WhenAll(receiveLinkCreator, sendingLinkCreator).ConfigureAwait(false); _methodReceivingLink = receiveLinkCreator.Result; _methodSendingLink = sendingLinkCreator.Result; _methodReceivingLink.RegisterMethodListener(OnMethodReceived); _methodSendingLink.Closed += OnLinkDisconnected; _methodReceivingLink.Closed += OnLinkDisconnected; if (Logging.IsEnabled) { Logging.Associate(this, _methodReceivingLink, $"{nameof(_methodReceivingLink)}"); } if (Logging.IsEnabled) { Logging.Associate(this, _methodSendingLink, $"{nameof(_methodSendingLink)}"); } } catch (Exception) { _methodReceivingLink?.Abort(); _methodReceivingLink = null; _methodSendingLink?.Abort(); _methodSendingLink = null; throw; } finally { if (Logging.IsEnabled) { Logging.Exit(this, timeout, $"{nameof(EnableMethodsAsync)}"); } } }
private async Task OpenMethodsReceiverLinkAsync(AmqpIoTSession amqpIoTSession, string correlationIdSuffix, TimeSpan timeout) { if (_methodReceivingLink == null || _methodReceivingLink.IsClosing()) { _methodReceivingLink = await amqpIoTSession.OpenMethodsReceiverLinkAsync(_deviceIdentity, correlationIdSuffix, timeout).ConfigureAwait(false); _methodReceivingLink.Closed += (obj, arg) => { amqpIoTSession.SafeClose(); }; _methodReceivingLink.RegisterMethodListener(OnMethodReceived); if (Logging.IsEnabled) { Logging.Associate(this, _methodReceivingLink, $"{nameof(_methodReceivingLink)}"); } } }