private async Task <string> GetAccessTokenAsync()
        {
            string accessToken = tokenResponse?.GetValidAccessToken();

            if (string.IsNullOrEmpty(accessToken))
            {
                lock (accessTokenTaskLock)
                {
                    if (accessTokenTask == null)
                    {
                        // access token task may be shared by multiple messaging task, thus should not pass cancellationToken to it
                        accessTokenTask = RequestAccessTokenAsync(default);