예제 #1
0
        /// <summary>
        /// 具体执行
        /// </summary>
        private void RunSignle()
        {
            var socket = ZSocket.CreateClientSocket(Config.WorkerResultAddress, ZSocketType.DEALER);

            {
                using (var pool = ZmqPool.CreateZmqPool())
                {
                    pool.Prepare(new[] { ZSocket.CreateClientSocket(Config.WorkerCallAddress, ZSocketType.PULL, Identity) }, ZPollEvent.In);
                    State = StationState.Run;
                    while (CanLoop)
                    {
                        if (!pool.Poll() || !pool.CheckIn(0, out var message))
                        {
                            continue;
                        }
                        Interlocked.Increment(ref RecvCount);
                        using (message)
                        {
                            if (!Unpack(message, out var item))
                            {
                                SendLayoutErrorResult(ref socket, item.Caller);
                                continue;
                            }
                            ApiCall(ref socket, item);
                        }
                    }
                }
            }
            socket.Dispose();
            IocHelper.DisposeScope();
            _processSemaphore?.Release();
        }
예제 #2
0
 private Task <HttpResponseMessage> DoEnd(Task <HttpResponseMessage> t1, HttpRequestMessage request, CancellationToken cancellationToken)
 {
     try
     {
         t1.Wait(cancellationToken);
         HttpResponseMessage result;
         if (t1.IsCanceled)
         {
             LogRecorder.MonitorTrace("操作被取消");
             result = request.ToResponse(ApiResult.Error(-7, "服务器正忙", "操作被取消"));
             LogRecorder.EndMonitor();
             return(Task <HttpResponseMessage> .Factory.StartNew(() => result, cancellationToken));
         }
         if (t1.IsFaulted)
         {
             LogRecorder.MonitorTrace(t1.Exception?.Message);
             LogRecorder.Exception(t1.Exception);
             result = request.ToResponse(ApiResult.Error(-1, "未知错误", t1.Exception?.Message));
         }
         else
         {
             result = t1.Result;
         }
         return(Task <HttpResponseMessage> .Factory.StartNew(delegate
         {
             OnEnd(request, result, cancellationToken);
             return result;
         }, cancellationToken));
     }
     finally
     {
         IocHelper.DisposeScope();
     }
 }