public static async Task <NpgsqlDataReader> SqlExecuteReaderWithRetryAsync(NpgsqlConnection connection, NpgsqlCommand sqlCmd, Func <RetryCheckParameter, bool> canRetry, CommandBehavior cmdBehavior = CommandBehavior.Default) { RetryCheckParameter retryParamenter = new RetryCheckParameter() { EndRetryTime = DateTime.UtcNow, RetryCount = 0 }; sqlCmd.Connection = connection; label_1: NpgsqlDataReader sqlDataReader; try { await SqlSessionStateRepositoryUtil.OpenConnectionAsync(connection); sqlDataReader = (NpgsqlDataReader)await sqlCmd.ExecuteReaderAsync(cmdBehavior); } catch (NpgsqlException ex) { retryParamenter.Exception = ex; if (!canRetry(retryParamenter)) { throw; } else { goto label_1; } } return(sqlDataReader); }
public static async Task <int> SqlExecuteNonQueryWithRetryAsync(NpgsqlConnection connection, NpgsqlCommand sqlCmd, Func <RetryCheckParameter, bool> canRetry, bool ignoreInsertPKException = false) { RetryCheckParameter retryParamenter = new RetryCheckParameter() { EndRetryTime = DateTime.UtcNow, RetryCount = 0 }; sqlCmd.Connection = connection; label_1: try { await SqlSessionStateRepositoryUtil.OpenConnectionAsync(connection); return((int)await sqlCmd.ExecuteNonQueryAsync()); } catch (NpgsqlException ex) { //if (SqlSessionStateRepositoryUtil.IsInsertPKException(ex, ignoreInsertPKException)) // return -1; retryParamenter.Exception = ex; if (!canRetry(retryParamenter)) { throw; } else { goto label_1; } } }