WPF无效的gRPC

时间:2017-01-05 10:57:33

标签: c# wpf grpc

我试图让gRPC C#示例在WPF中运行 在控制台应用程序中工作的相同代码不起作用。
我缺少什么。 在Console App中工作但在WPF中不起作用的最小类如下所示:

public class GrpcClientImpl
    {
        private GrpcService.GrpcService.GrpcServiceClient client;
        public GrpcTestClientImpl()
        {
            var channel = new Channel("127.0.0.1:6980", ChannelCredentials.Insecure);
            client = new GrpcService.GrpcService.GrpcServiceClient(channel);
            ProcessFeed().Wait();
        }
        public async Task ProcessFeed()
        {
            try
            {
                using (var call = client.Feed(new FeedRequest()))
                {
                    var responseStream = call.ResponseStream;
                    while (await responseStream.MoveNext())
                    {
                        var result = responseStream.Current;
                        Console.WriteLine("received result");
                    }
                }
            }
            catch (RpcException e)
            {
                Console.WriteLine("RPC failed " + e);
                throw;
            }
        }
    }

responseStream.MoveNext()是挂起的地方。它不响应已发送的项目,如果gRPC服务器不存在,它也不会触发异常。我错过了什么?

1 个答案:

答案 0 :(得分:2)

问题是构造函数中的阻塞调用ProcessFeed().Wait();

这篇文章解释了原因: http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

要解决此问题,请从外部(不在costructor中)调用await ProcessFeed();