Beispiel #1
0
        private static void HandleClientStreamingCall(TestService.TestServiceClient client)
        {
            var tokenSource = new CancellationTokenSource();
            var call        = client.GetInputStream(deadline: DateTime.UtcNow.AddSeconds(10), cancellationToken: tokenSource.Token);

            try
            {
                for (int i = 0; i < 3; i++)
                {
                    var inputLine = Console.ReadLine();

                    if (inputLine == "Q")
                    {
                        tokenSource.Cancel();
                        break;
                    }

                    call.RequestStream.WriteAsync(new EchoInput()
                    {
                        Input = inputLine
                    });
                }

                call.RequestStream.CompleteAsync();
                var response = call.ResponseAsync;
                response.Wait();

                Console.WriteLine("Get input from stream: " + Environment.NewLine + response.Result.Output);
                Console.WriteLine("Get time: " + response.Result.TimeStamp.ToDateTime().ToLocalTime());
            }
            catch (AggregateException ex)
            {
                foreach (var ie in ex.InnerExceptions)
                {
                    if (ie is RpcException)
                    {
                        switch (((RpcException)ie).StatusCode)
                        {
                        case StatusCode.DeadlineExceeded:
                            Console.WriteLine("Exceed deadline.");
                            break;

                        case StatusCode.Cancelled:
                            Console.WriteLine("Operation cancelled.");
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
            finally
            {
                tokenSource.Dispose();
            }
        }