public async Task <AuthenticationResult> RunAsync(CancellationToken cancellationToken = default)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            ApiEvent apiEvent = InitializeApiEvent(AuthenticationRequestParameters.Account?.HomeAccountId?.Identifier);

            AuthenticationRequestParameters.RequestContext.ApiEvent = apiEvent;
            try
            {
                using (AuthenticationRequestParameters.RequestContext.CreateTelemetryHelper(apiEvent))
                {
                    try
                    {
                        AuthenticationRequestParameters.LogParameters();
                        LogRequestStarted(AuthenticationRequestParameters);

                        AuthenticationResult authenticationResult = await ExecuteAsync(cancellationToken).ConfigureAwait(false);

                        LogReturnedToken(authenticationResult);

                        apiEvent.TenantId      = authenticationResult.TenantId;
                        apiEvent.AccountId     = authenticationResult.UniqueId;
                        apiEvent.WasSuccessful = true;

                        authenticationResult.AuthenticationResultMetadata.DurationTotalInMs   = sw.ElapsedMilliseconds;
                        authenticationResult.AuthenticationResultMetadata.DurationInHttpInMs  = apiEvent.DurationInHttpInMs;
                        authenticationResult.AuthenticationResultMetadata.DurationInCacheInMs = apiEvent.DurationInCacheInMs;
                        return(authenticationResult);
                    }
                    catch (MsalException ex)
                    {
                        apiEvent.ApiErrorCode = ex.ErrorCode;
                        AuthenticationRequestParameters.RequestContext.Logger.ErrorPii(ex);
                        throw;
                    }
                    catch (Exception ex)
                    {
                        AuthenticationRequestParameters.RequestContext.Logger.ErrorPii(ex);
                        throw;
                    }
                }
            }
            finally
            {
                ServiceBundle.MatsTelemetryManager.Flush(AuthenticationRequestParameters.RequestContext.CorrelationId.AsMatsCorrelationId());
            }
        }
        public async Task <AuthenticationResult> RunAsync(CancellationToken cancellationToken)
        {
            ApiEvent apiEvent = InitializeApiEvent(AuthenticationRequestParameters.Account?.HomeAccountId?.Identifier);

            try
            {
                using (ServiceBundle.TelemetryManager.CreateTelemetryHelper(apiEvent))
                {
                    try
                    {
                        await PreRunAsync().ConfigureAwait(false);

                        AuthenticationRequestParameters.LogParameters(AuthenticationRequestParameters.RequestContext.Logger);
                        LogRequestStarted(AuthenticationRequestParameters);

                        AuthenticationResult authenticationResult = await ExecuteAsync(cancellationToken).ConfigureAwait(false);

                        LogReturnedToken(authenticationResult);

                        apiEvent.TenantId      = authenticationResult.TenantId;
                        apiEvent.AccountId     = authenticationResult.UniqueId;
                        apiEvent.WasSuccessful = true;
                        return(authenticationResult);
                    }
                    catch (MsalException ex)
                    {
                        apiEvent.ApiErrorCode = ex.ErrorCode;
                        AuthenticationRequestParameters.RequestContext.Logger.ErrorPii(ex);
                        throw;
                    }
                    catch (Exception ex)
                    {
                        AuthenticationRequestParameters.RequestContext.Logger.ErrorPii(ex);
                        throw;
                    }
                }
            }
            finally
            {
                ServiceBundle.TelemetryManager.Flush(AuthenticationRequestParameters.RequestContext.CorrelationId.AsMatsCorrelationId());
            }
        }
        public async Task <AuthenticationResult> RunAsync(CancellationToken cancellationToken = default)
        {
            Stopwatch sw = Stopwatch.StartNew();

            ApiEvent apiEvent = InitializeApiEvent(AuthenticationRequestParameters.Account?.HomeAccountId?.Identifier);

            AuthenticationRequestParameters.RequestContext.ApiEvent = apiEvent;

            using (AuthenticationRequestParameters.RequestContext.CreateTelemetryHelper(apiEvent))
            {
                try
                {
                    AuthenticationRequestParameters.LogParameters();
                    LogRequestStarted(AuthenticationRequestParameters);

                    AuthenticationResult authenticationResult = await ExecuteAsync(cancellationToken).ConfigureAwait(false);

                    LogReturnedToken(authenticationResult);

                    UpdateTelemetry(sw, apiEvent, authenticationResult);
                    LogMetricsFromAuthResult(authenticationResult, AuthenticationRequestParameters.RequestContext.Logger);
                    return(authenticationResult);
                }
                catch (MsalException ex)
                {
                    apiEvent.ApiErrorCode = ex.ErrorCode;
                    AuthenticationRequestParameters.RequestContext.Logger.ErrorPii(ex);
                    throw;
                }
                catch (Exception ex)
                {
                    AuthenticationRequestParameters.RequestContext.Logger.ErrorPii(ex);
                    throw;
                }
            }
        }