private async Task Receive()
        {
            int delayTimeout = 1;

            byte[] rawResponse;

            var redis = this.connection.GetClient();

            while (Interlocked.Read(ref this.receiveState) == 1)
            {
                rawResponse = await redis.ListRightPopAsync(receiveQueue).IgnoreException(typeof(RedisException));

                if (rawResponse == null)
                {
                    await Task.Delay(delayTimeout);

                    //maybe increase delayTimeout a little bit?
                    continue;
                }

                var redisResponseBytes = rawResponse;

                Task.Run(() =>
                {
                    var redisResponse = RedisResponse.FromBinary(redisResponseBytes);
                    this.OnResponse(redisResponse);
                });
            }
        }
        private void OnResponse(RedisResponse redisResponse)
        {
            TaskCompletionSource <ResponseData> callback;

            if (this.requestCallbacks.TryRemove(redisResponse.RequestId, out callback))
            {
                callback.SetResult(redisResponse.Response);
            }
        }
        private void OnRequest(IDatabase redis, RedisRequest redisRequest)
        {
            var service = this.serviceFactory.CreateService(redisRequest.Request.Service);

            service.Process(redisRequest.Request)
            .ContinueWith(t =>
            {
                var response = t.Result;

                var redisResponse      = new RedisResponse(redisRequest.Id, response);
                var redisResponseBytes = redisResponse.ToBinary();

                redis.ListLeftPushAsync(redisRequest.ReceiveQueue, redisResponseBytes);
            });
        }
Beispiel #4
0
 private void OnResponse(RedisResponse redisResponse)
 {
     TaskCompletionSource<ResponseData> callback;
     if (this.requestCallbacks.TryRemove(redisResponse.RequestId, out callback))
     {
         callback.SetResult(redisResponse.Response);
     }
 }
Beispiel #5
0
        private void OnRequest(IDatabase redis, RedisRequest redisRequest)
        {
            var service = this.serviceFactory.CreateService(redisRequest.Request.Service);

            service.Process(redisRequest.Request)
                   .ContinueWith(t =>
                   {
                       var response = t.Result;

                       var redisResponse = new RedisResponse(redisRequest.Id, response);
                       var redisResponseBytes = redisResponse.ToBinary();

                       redis.ListLeftPushAsync(redisRequest.ReceiveQueue, redisResponseBytes);
                   });
        }