/// <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; } });
/// <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; } });