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); }); }
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); }); }