public void Start(CancellationToken cancellationToken = default) { _ipcClient.Received <RandomNextRequest>() .Subscribe(async req => { var value = _random.Next(); var response = new RandomNextResponse(req.Id, value); await _ipcClient.SendAsync(response, cancellationToken).ConfigureAwait(false); }, cancellationToken); }
private static async Task NamedPipesClientDemo() { var peerA = new NamedPipesClient(); var peerB = new NamedPipesClient(peerA.PeerId, peerA.OwnId); peerB.Received <DateTime>() .Subscribe(date => Console.WriteLine($"Peer B received: {date}.")); while (true) { var now = DateTime.Now; Console.WriteLine($"Peer A is sending: {now}"); await peerA.SendAsync(now).ConfigureAwait(false); Console.ReadLine(); } }
public async Task <int> NextAsync(CancellationToken cancellationToken = default) { var request = new RandomNextRequest() { Id = Guid.NewGuid() }; var responseTask = _ipcClient.Received <RandomNextResponse>() .Where(resp => resp.RequestId == request.Id) .Timeout(TimeSpan.FromSeconds(5)) .FirstOrDefaultAsync() .ToTask(cancellationToken); await _ipcClient.SendAsync(request, cancellationToken).ConfigureAwait(false); var response = await responseTask.ConfigureAwait(false); return(response.Value); }
public async Task <TResponse> ExecuteAsync <TResponse>(IRequest request, TimeSpan?timeout = null, CancellationToken cancellationToken = default) where TResponse : IResponse { var responseTask = _ipcClient.Received <TResponse>() .Where(resp => resp.RequestId == request.Id) .Timeout(timeout ?? _defaultTimeout) .FirstOrDefaultAsync() .ToTask(cancellationToken); await _ipcClient.SendAsync(request, cancellationToken).ConfigureAwait(false); var response = await responseTask.ConfigureAwait(false); if (response == null) { throw new DataException("Server didn't yield any result."); } return(response); }