public async Task InitLoopAsync(TimeSpan timeout)
        {
            if (Logging.IsEnabled)
            {
                Logging.Enter(this, timeout, $"{nameof(InitLoopAsync)}");
            }
            CancellationTokenSource oldTokenSource = _cancellationTokenSource;

            _cancellationTokenSource = new CancellationTokenSource();
            CancellationToken newToken = _cancellationTokenSource.Token;

            oldTokenSource?.Cancel();

            DateTime refreshOn = await _amqpIoTCbsLink
                                 .SendTokenAsync(
                _amqpIoTCbsTokenProvider,
                _connectionString.AmqpEndpoint,
                _audience,
                _audience,
                AccessRightsStringArray,
                timeout)
                                 .ConfigureAwait(false);

            if (refreshOn < DateTime.MaxValue)
            {
                StartLoop(refreshOn, newToken);
            }

            if (Logging.IsEnabled)
            {
                Logging.Exit(this, timeout, $"{nameof(InitLoopAsync)}");
            }
        }