示例#1
0
文件: RdCall.cs 项目: Tryweirder/rd
        public TRes Sync(TReq request, RpcTimeouts timeouts = null)
        {
            AssertBound();
            if (!Async)
            {
                AssertThreading();
            }

            var task = StartInternal(Lifetime.Eternal, request, SynchronousScheduler.Instance);

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            var timeoutsToUse = RpcTimeouts.GetRpcTimeouts(timeouts);

            if (!task.Wait(timeoutsToUse.ErrorAwaitTime))
            {
                throw new TimeoutException($"Sync execution of rpc `{Location}` is timed out in {timeoutsToUse.ErrorAwaitTime.TotalMilliseconds} ms");
            }

            stopwatch.Stop();

            var freezeTime = stopwatch.ElapsedMilliseconds;

            if (freezeTime > timeoutsToUse.WarnAwaitTime.TotalMilliseconds)
            {
                Log.Root.Error("Sync execution of rpc `{0}` executed too long: {1} ms", Location, freezeTime);
            }

            return(task.Result.Value.Unwrap());
        }
示例#2
0
        public static RpcTimeouts GetRpcTimeouts([CanBeNull] RpcTimeouts timeouts)
        {
            RpcTimeouts timeoutsToUse;

            if (RespectRpcTimeouts)
            {
                timeoutsToUse = timeouts ?? Default;
            }
            else
            {
                timeoutsToUse = timeouts == null
          ? Maximal
          : Max(timeouts, Maximal);
            }
            return(timeoutsToUse);
        }
示例#3
0
 public static RpcTimeouts Max(RpcTimeouts x, RpcTimeouts y)
 {
     return(new RpcTimeouts(
                x.WarnAwaitTime > y.WarnAwaitTime ? x.WarnAwaitTime : y.WarnAwaitTime,
                x.ErrorAwaitTime > y.ErrorAwaitTime ? x.ErrorAwaitTime : y.ErrorAwaitTime));
 }
示例#4
0
 public TRes Sync(TReq request, RpcTimeouts timeouts = null)
 {
     Assertion.AssertNotNull(myHandler, "myHandler != null");
     return(myHandler(myBindLifetime, request).Result.Value.Unwrap());
 }