private async Task <AOResult <T> > RequestAsync <T>(RequstType requestType, string resource, object requestBody, TimeSpan experation, StorageType storageType, string callMethodName) { var aoResult = new AOResult <T>(); T result = default(T); try { switch (requestType) { case RequstType.Post: result = await RestService.PostAsync <T>(resource, requestBody); break; case RequstType.Get: result = await RestService.GetAsync <T>(resource); break; case RequstType.GetWithCache: result = await RestService.GetAsyncWithCashe <T>(resource, experation, storageType); break; case RequstType.Put: result = await RestService.PutAsync <T>(resource, requestBody); break; case RequstType.Delete: result = await RestService.DeleteAsync <T>(resource, requestBody); break; default: throw new InvalidOperationException("Wrong request type"); } aoResult.SetSuccess(result); } catch (WebException ex) { ErrorsTracker.TrackError(ex, ex.Message); aoResult.SetError(callMethodName + "_exception", ex.Message, ex); Debug.WriteLine("## Error rest service || " + callMethodName + " **** " + resource); } catch (HttpRequestException ex) { ErrorsTracker.TrackError(ex, ex.Message); aoResult.SetError(callMethodName + "_exception", ex.Message, ex); Debug.WriteLine("## Error rest service || " + callMethodName + " **** " + resource); } catch (Exception ex) { ErrorsTracker.TrackError(ex, ex.Message); throw; } return(aoResult); }
public async Task <T> GetAsync <T>(string key, Func <Task <T> > valFunc, TimeSpan experation) { var isExist = await CanGetObject <T>(key); if (isExist) { return(await Get <T>(key)); } else { try { var res = await valFunc(); await Set(key, res, experation); return(res); } catch (Exception ex) { ErrorsTracker.TrackError(ex, ex.Message); throw; } } }