public async Task <string> GetMenu(int menuId) { PubSubRequestMessage req = new PubSubRequestMessage() { Value = menuId, ResponseChannel = _responseChannel }; TaskCompletionSource <string> tcs = new TaskCompletionSource <string>(); _messageCallbacks.TryAdd(req.CorrelationId, response => tcs.SetResult(response.ResponseValue)); long numberOfClients = await _subscriber.PublishAsync(_requestChannel, JsonConvert.SerializeObject(req)); return(await tcs.Task); }
private void RequestCallback(RedisChannel chl, RedisValue msg) { PubSubRequestMessage requestMessage = JsonConvert.DeserializeObject <PubSubRequestMessage>(msg); Thread.Sleep(100 + new Random().Next(500, 2000)); PubSubResponseMessage responseMessage = new PubSubResponseMessage() { CorrelationId = requestMessage.CorrelationId, ResponseValue = $"Hello {requestMessage.Value}" }; string message = JsonConvert.SerializeObject(responseMessage); _subscriber.Publish(requestMessage.ResponseChannel, message); }