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