public Task <ResponseData> Request(RequestData request, CancellationToken token)
        {
            this.EnsureIsReceiving();

            var requestId = this.NextId();

            var redisRequest      = new RedisRequest(this.receiveQueue, requestId, request);
            var redisRequestBytes = redisRequest.ToBinary();

            var redis     = this.connection.GetClient();
            var lpushTask = redis.ListLeftPushAsync(sendQueue, redisRequestBytes);

            var callback = new TaskCompletionSource <ResponseData>();

            this.requestCallbacks[requestId] = callback;

            if (token != CancellationToken.None)
            {
                token.Register(() =>
                {
                    this.OnRequestCancelled(requestId);
                });
            }

            lpushTask.ContinueWith(t =>
            {
                if (lpushTask.Exception != null)
                {
                    this.OnRequestError(requestId, lpushTask.Exception.InnerException);
                }
            });

            return(callback.Task);
        }
Example #2
0
        public Task<ResponseData> Request(RequestData request, CancellationToken token)
        {
            this.EnsureIsReceiving();

            var requestId = this.NextId();

            var redisRequest = new RedisRequest(this.receiveQueue, requestId, request);
            var redisRequestBytes = redisRequest.ToBinary();

            var redis = this.connection.GetClient();
            var lpushTask = redis.ListLeftPushAsync(sendQueue, redisRequestBytes);

            var callback = new TaskCompletionSource<ResponseData>();
            this.requestCallbacks[requestId] = callback;

            if (token != CancellationToken.None)
            {
                token.Register(() =>
                {
                    this.OnRequestCancelled(requestId);
                });
            }

            lpushTask.ContinueWith(t =>
            {
                if (lpushTask.Exception != null)
                {
                    this.OnRequestError(requestId, lpushTask.Exception.InnerException);
                }
            });

            return callback.Task;
        }