带有 WPF 的 gRPC 不工作

gRPC with WPF not working

我正在尝试让 gRPC C# 示例在 WPF 中运行。
在控制台应用程序中运行的相同代码不起作用。
我错过了什么。 在控制台应用程序中有效但在 WPF 中无效的最小 class 如下所示:

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 服务器不存在,它也不会触发异常。我错过了什么?

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

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

要解决此问题,请从外部(而不是在构造函数中)调用 await ProcessFeed();