Microsoft.Azure.Amqp.Transport.AmqpTransportInitiator.ConnectTaskAsync C# (CSharp) Method

ConnectTaskAsync() public method

public ConnectTaskAsync ( System.TimeSpan timeout ) : Task
timeout System.TimeSpan
return Task
        public Task<TransportBase> ConnectTaskAsync(TimeSpan timeout)
        {
            var tcs = new TaskCompletionSource<TransportBase>();
            var args = new TransportAsyncCallbackArgs
            {
                CompletedCallback = a =>
                {
                    if (a.Exception != null)
                    {
                        tcs.SetException(a.Exception);
                    }
                    else
                    {
                        tcs.SetResult(a.Transport);
                    }
                }
            };

            if (!this.ConnectAsync(timeout, args))
            {
                args.CompletedCallback(args);
            }

            return tcs.Task;
        }

Usage Example

        async Task<AmqpSession> CreateSessionAsync(TimeSpan timeout)
        {
            TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);
            this.refreshTokenTimer.Cancel();

            var amqpSettings = this.CreateAmqpSettings();
            TransportBase transport;
            if (this.useWebSocketOnly)
            {
                // Try only Amqp transport over WebSocket
                transport = await this.CreateClientWebSocketTransport(timeoutHelper.RemainingTime());
            }
            else
            {             
                var tlsTransportSettings = this.CreateTlsTransportSettings();
                var amqpTransportInitiator = new AmqpTransportInitiator(amqpSettings, tlsTransportSettings);
                try
                {
                    transport = await amqpTransportInitiator.ConnectTaskAsync(timeoutHelper.RemainingTime());
                }
                catch (Exception e)
                {
                    if (Fx.IsFatal(e))
                    {
                        throw;
                    }

                    // Amqp transport over TCP failed. Retry Amqp transport over WebSocket
                    if (timeoutHelper.RemainingTime() != TimeSpan.Zero)
                    {
                        transport = await this.CreateClientWebSocketTransport(timeoutHelper.RemainingTime());
                    }
                    else
                    {
                        throw;
                    }
                }
            }

            AmqpConnectionSettings amqpConnectionSettings = new AmqpConnectionSettings()
            {
                MaxFrameSize = AmqpConstants.DefaultMaxFrameSize,
                ContainerId = Guid.NewGuid().ToString("N"),
                HostName = this.connectionString.AmqpEndpoint.Host
            };

            var amqpConnection = new AmqpConnection(transport, amqpSettings, amqpConnectionSettings);
            await amqpConnection.OpenAsync(timeoutHelper.RemainingTime());

            var sessionSettings = new AmqpSessionSettings()
            {
                Properties = new Fields()
            };

            var amqpSession = amqpConnection.CreateSession(sessionSettings);
            await amqpSession.OpenAsync(timeoutHelper.RemainingTime());

            // This adds itself to amqpConnection.Extensions
            var cbsLink = new AmqpCbsLink(amqpConnection);
            await this.SendCbsTokenAsync(cbsLink, timeoutHelper.RemainingTime());
            return amqpSession;
        }
All Usage Examples Of Microsoft.Azure.Amqp.Transport.AmqpTransportInitiator::ConnectTaskAsync