public ApiResult <TResult> TryCall <T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(Func <T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> func, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, string methodName) { var callStep = new CallStep(); callStep.Parameters = StringHelper.GetArgsInfo(t1, t2, t3, t4, t5, t6, t7, t8, t9, 0); callStep.Start(methodName); var apiResult = ApiResult <TResult> .MakeSuccessResult(); try { TResult result = func(t1, t2, t3, t4, t5, t6, t7, t8, t9); apiResult.Data = result; } catch (Exception ex) { ExceptionFail(apiResult, ex, callStep); } callStep.Stop(apiResult, Trace.StepTrace.SerializeResult); if (Trace != null) { Trace.StepTrace.AddStep(callStep); } return(apiResult); }
public CachedResult <T> GetCachedValue <T>(string prefix, string subKey, Func <ApiResult <T> > loader, TimeSpan expire, string cacheName = "Couch", bool useLock = false) { var result = CachedResult <T> .MakeSucessResult(); var key = prefix + subKey; T data; var callStep = new CallStep(); var methodName = _loaderRegex.Replace(loader.Method.Name.Replace("<", ""), ""); callStep.Start(methodName); var cache = CacheInstance.Collection[cacheName]; if (!cache.TryGet(key, out data)) { if (useLock && _LockObjects.ContainsKey(prefix)) { Monitor.Enter(_LockObjects[prefix]); } if (!useLock || !cache.TryGet(key, out data)) { var loadResult = loader(); if (loadResult.Success) { data = loadResult.Data; cache.Add(key, data, expire); } result.HitCache = false; result.Copy(loadResult); } if (useLock && _LockObjects.ContainsKey(prefix)) { Monitor.Exit(_LockObjects[prefix]); } } result.Data = data; callStep.Stop(result, result.HitCache); return(result); }