Ejemplo n.º 1
0
        private async Task ReceiveRequests()
        {
            int delayTimeout = 1;

            byte[] rawRequest;

            var redis = this.connection.GetClient();

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

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

                    //increase timeout until delayMaxTimeout
                    continue;
                }

                var redisRequestBytes = rawRequest;

                Task.Run(() =>
                {
                    var redisRequest = RedisRequest.FromBinary(redisRequestBytes);
                    this.OnRequest(redis, redisRequest);
                });
            }
        }