static async Task Main(string[] args) { Channel channel = new Channel(target, ChannelCredentials.Insecure); await channel.ConnectAsync().ContinueWith((task) => { if (task.Status == TaskStatus.RanToCompletion) { Console.WriteLine("The client connected successfully"); } }); var client = new FindMaxService.FindMaxServiceClient(channel); var stream = client.findMaximum(); var responseReaderTask = Task.Run(async() => { while (await stream.ResponseStream.MoveNext()) { Console.WriteLine(stream.ResponseStream.Current.Max); } }); int[] numbers = { 1, 5, 3, 6, 2, 20 }; foreach (var number in numbers) { await stream.RequestStream.WriteAsync(new FindMaxRequest() { Number = number }); } await stream.RequestStream.CompleteAsync(); await responseReaderTask; channel.ShutdownAsync().Wait(); Console.ReadKey(); }
static async Task Main(string[] args) { try { Channel channel = new Channel(target, ChannelCredentials.Insecure); await channel.ConnectAsync().ContinueWith((task) => { if (task.Status == TaskStatus.RanToCompletion) { Console.WriteLine("The client connected successfully"); } }); var client = new FindMaxService.FindMaxServiceClient(channel); var stream = client.FindMax(); var responseReaderTask = Task.Run(async() => { while (await stream.ResponseStream.MoveNext()) { Console.WriteLine($"Max: {stream.ResponseStream.Current.Max}"); } }); string key; do { Console.WriteLine(Environment.NewLine + "Digit a number or type 'ESC' to exit"); key = Console.ReadLine(); var isNumeric = int.TryParse(key, out int number); if (key.ToLower() != esc && isNumeric) { Console.WriteLine($"Sending: {number}"); await stream.RequestStream.WriteAsync(new FindMaxRequest() { Number = number }); } } while (key.ToLower() != esc); await stream.RequestStream.CompleteAsync(); await responseReaderTask; channel.ShutdownAsync().Wait(); Console.ReadLine(); } catch (RpcException e) { Console.WriteLine($"StatusCode: {e.Status.StatusCode} | Detail: {e.Status.Detail}"); } catch (Exception e) { Console.WriteLine("Something went wrong."); } }