コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }