public Task DoWithoutTransactionAsync(Action <TModel> action, RetryParams retryParams) { var policy = MakeRetryPolicy(retryParams); return(policy.ExecuteAsync(() => { using (var shortLivedModel = factory()) { action(shortLivedModel); } return Task.FromResult(Resources.Database_Action_Completed); })); }
public async Task <TResult> QueryAsync <TResult>(Func <TModel, TResult> query, RetryParams retryParams) { if (model == null) { throw new NullReferenceException("The Model has been disposed."); } var policy = MakeRetryPolicy(retryParams); return(await policy.ExecuteAsync(() => Task.Run(() => { var result = query(model); if (disposeOnCompleted) { model.Dispose(); model = default(TModel); } return result; })).ConfigureAwait(false)); }
private static RetryPolicy <SqlDatabaseTransientErrorDetectionStrategy> MakeRetryPolicy(RetryParams retry) { var policy = new RetryPolicy <SqlDatabaseTransientErrorDetectionStrategy>( retry.MaxRetries, TimeSpan.FromMilliseconds(retry.MinBackOffDelayInMilliseconds), TimeSpan.FromMilliseconds(retry.MaxBackOffDelayInMilliseconds), TimeSpan.FromMilliseconds(retry.DeltaBackOffInMilliseconds)); return(policy); }
public Task DoAsync(Action <TModel> action, RetryParams retryParams) { var policy = MakeRetryPolicy(retryParams); return(policy.ExecuteAsync(() => ExecuteWithTransaction(action))); }
public async Task <TResult> QueryAsync <TResult>(IDatabaseQuery <TResult, TModel> query, RetryParams retryParams) { var key = model.CacheHint(query) + cacheHint; if (Debugger.IsAttached) { Trace.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0}Hashed CacheHint :{0}{1}", Environment.NewLine, key)); } if (cache.Contains(key)) { return(GetFromCache <TResult>(key)); } if (Debugger.IsAttached) { Trace.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0}Query result from server{0}", Environment.NewLine)); } var entities = await model.QueryAsync(query, retryParams) .ConfigureAwait(false); cache.Add(new CacheItem(key, entities), cacheItemPolicy); return(entities); }