private async Task CreateNmsConnectionInternal()

in src/NMS.AMQP/NmsConnection.cs [451:493]


        private async Task CreateNmsConnectionInternal(bool sync = true)
        {
            if (connected || closed)
            {
                return;
            }

            var syncLock = sync ? syncRoot.Lock() : await syncRoot.LockAsync();
            using(syncLock)
            {
                if (closed || connected)
                {
                    return;
                }

                try
                {
                    var configureTask = provider.Connect(ConnectionInfo).Await();
                    if (sync)
                        configureTask.GetAwaiter().GetResult();
                    else
                        await configureTask;
                    connected.Set(true);
                }
                catch (Exception e)
                {
                    try
                    {
                        if (sync)
                            provider.Close();
                        else
                            await provider.CloseAsync().Await();
                    }
                    catch
                    {
                        // ignored
                    }

                    throw NMSExceptionSupport.Create(e);
                }
            }
            
        }