private static async Task RunServerStreamingRpc(FooService.FooServiceClient client) { WriteLine("Starting server streaming RPC example...\n", ConsoleColor.Blue); Console.WriteLine("You will be requested for an amount of messages that should be streamed to client."); Console.WriteLine("gRPC Server will then stream this amount of messages before it will finish the request."); WriteRequestInput("Amount of messages:"); var result = Convert.ToInt32(Console.ReadLine()); var fooRequest = new FooServerStreamingRequest { Message = "Sample request", MessageCount = result }; var serverStreamingCall = client.GetFoos(fooRequest); Console.WriteLine($"\n\tgRPC Server responses:"); await foreach (var response in serverStreamingCall.ResponseStream.ReadAllAsync()) { Console.WriteLine($"\t> {response.Message}"); } WriteLine("\nFinished server streaming RPC example...", ConsoleColor.Blue); WriteSeparator(); }
/// <summary> /// Server streaming RPC /// </summary> public override async Task GetFoos(FooServerStreamingRequest request, IServerStreamWriter <FooResponse> responseStream, ServerCallContext context) { var count = 0; while (count < request.MessageCount && !context.CancellationToken.IsCancellationRequested) { count++; var response = new FooResponse { Message = $"Request message: {request.Message} ({count})" }; await responseStream.WriteAsync(response).ConfigureAwait(false); await Task.Delay(1000).ConfigureAwait(false); } }