Beispiel #1
0
        protected async void SaveEmployees()
        {
            Response5         = string.Empty; //清空前台显示
            using var channel = GrpcChannel.ForAddress(ServerAdderss);
            var client = new EmployeeService.EmployeeServiceClient(channel);
            var serverStreamingCall = client.SaveEmployees();
            //因为是双向流的方式,我们需要同时操作“请求流”和“响应流”
            var requestStream  = serverStreamingCall.RequestStream;
            var responseStream = serverStreamingCall.ResponseStream;
            //获取员工数据
            var employees = GetNewEmployees(Request5.Trim());

            //依次将员工数据写入请求流中
            foreach (var employee in employees)
            {
                await requestStream.WriteAsync(new EmployeeRequest { Employee = employee });
            }
            //告知服务端数据传递完毕
            await requestStream.CompleteAsync();

            //读取服务端返回的流式数据
            await Task.Run(async() =>
            {
                while (await responseStream.MoveNext(new CancellationToken()))
                {
                    Response5 += $"New Employee “{responseStream.Current.Employee.Name}” is Saved"
                                 + Environment.NewLine;
                }
            });
        }