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 ComputeAverageService.ComputeAverageServiceClient(channel); var stream = client.ComputeAverage(); 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) { await stream.RequestStream.WriteAsync(new ComputeAverageRequest() { Number = number }); } } while (key.ToLower() != esc); await stream.RequestStream.CompleteAsync(); var responseClientStream = await stream.ResponseAsync; Console.WriteLine(responseClientStream.ToString()); 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."); } }
//Client Streaming Average public static async Task CalculateAverage(Channel channel) { var client = new ComputeAverageService.ComputeAverageServiceClient(channel); var stream = client.ComputeAverage(); foreach (int i in Enumerable.Range(1, 4)) { var request = new ComputeAverageRequest() { Number = i }; await stream.RequestStream.WriteAsync(request); } await stream.RequestStream.CompleteAsync(); var response = await stream.ResponseAsync; Console.WriteLine(response.Result); }
static async Task Main(string[] args) { //from Grpc.Core Channel channel = new Channel(serverAddress, ChannelCredentials.Insecure); await channel.ConnectAsync().ContinueWith(task => { if (task.Status == TaskStatus.RanToCompletion || task.Status == TaskStatus.Canceled) { Console.WriteLine("The client connected to the server successfully!"); } }); var inputStream = new[] { 1, 10, 30, 22, 4, 50, 123, 2343, 23 }; var client = new ComputeAverageService.ComputeAverageServiceClient(channel); //get stream instance var stream = client.ComputeAverageCalculation(); foreach (var input in inputStream) { //write data on request stream await stream.RequestStream.WriteAsync(new Request { Argument = new NumberData { Number = input } }); } //signal request stream end await stream.RequestStream.CompleteAsync(); //get the response var response = await stream.ResponseAsync; Console.WriteLine($"Compute average for input stream {string.Join(",", inputStream)} = {response.Result.Number}"); await channel.ShutdownAsync(); Console.ReadKey(); }