Exemplo n.º 1
0
        /// <summary>
        /// Asynchronous retry policy that returns Task of <typeparamref name="T"/>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="action"></param>
        /// <param name="customResilienceSettings"></param>
        /// <param name="onRetry"></param>
        /// <returns></returns>
        protected async Task <T> ExecuteWithAsyncRetries <T>(
            Func <Task <T> > action,
            ResilienceSettings customResilienceSettings = null,
            Action <MySqlException, TimeSpan> onRetry   = null) =>

        await MySqlFailoverRetryPolicies
        .DefaultAsyncPolicy(
            customResilienceSettings,
            onRetry)
        .ExecuteAsync(async() =>
        {
            try
            {
                return(await action());
            }
            catch (MySqlException ex)
            {
                ClearConnectionPoolIfDatabaseFailingOver(ex);

                throw;
            }
        });
Exemplo n.º 2
0
        /// <summary>
        /// Synchronous retry policy of void return type
        /// </summary>
        /// <param name="action"></param>
        /// <param name="customResilienceSettings"></param>
        /// <param name="onRetry"></param>
        protected void ExecuteWithSyncRetries(
            Action action,
            ResilienceSettings customResilienceSettings = null,
            Action <MySqlException, TimeSpan> onRetry   = null) =>

        MySqlFailoverRetryPolicies
        .DefaultSyncPolicy(
            customResilienceSettings,
            onRetry)
        .Execute(() =>
        {
            try
            {
                action();
            }
            catch (MySqlException ex)
            {
                ClearConnectionPoolIfDatabaseFailingOver(ex);

                throw;
            }
        });