public async Task Subscribe(EventsSubscribeRequest[] requests, IEventsReceiveCallback handler, CancellationToken cancellationToken = new CancellationToken()) { if (handler == null) { throw new ArgumentNullException(nameof(handler), "request must have a non-null handler"); } Task[] taskArray = new Task[requests.Length]; for (int i = 0; i < requests.Length; i++) { taskArray[i] = Subscribe(requests[i], handler, cancellationToken); } await Task.WhenAll(taskArray); }
public async Task Subscribe(EventsSubscribeRequest request, IEventsReceiveCallback handler, CancellationToken cancellationToken = new CancellationToken()) { request.ClientId = this.ClientOptions.PopulateClientId(request.ClientId); request.Validate(); if (handler == null) { throw new ArgumentNullException(nameof(handler), "request must have a non-null handler"); } while (true) { try { using (var call = Client.SubscribeToEvents(request.ToSubscribeRequest(), ClientOptions.GetGrpcMetadata(), null, cancellationToken)) { while (await call.ResponseStream.MoveNext()) { EventsReceiveMessage message = new EventsReceiveMessage(call.ResponseStream.Current); handler.ReceiveEventsMessage(message); } } } catch (RpcException rpcx) { if (rpcx.StatusCode == StatusCode.Cancelled) { break; } else { handler.ReceiveEventsError(rpcx.Message); } } catch (Exception e) { handler.ReceiveEventsError(e.Message); } await Task.Delay(ClientOptions.ReconnectInterval); } }