2017-01-05 12 views
0

私はgRPC C#の例をWPFの内部で処理しようとしています。
コンソールアプリケーション内で動作している同じコードが機能していません。
私は何が欠けています。コンソールアプリケーションで動作し、WPFでは動作しません 最小限のクラスには、次のようになります。それがぶら下がっているところgRPC with WPF does not working

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サーバーが存在しない場合は例外をトリガーしません。私は何を逃したのですか?

答えて

2

問題は、コンストラクタ内でブロッキングコールProcessFeed().Wait();が問題です。

この投稿は、理由を説明しています(ないcostructorに)外部からawait ProcessFeed();を呼び出し、問題を解決するために http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

を。

+0

残念ながら私の要件は、フィードを聞きたいので、起動時に呼び出すことです。 – weismat

+0

Ok - 処理待ちの追加タスクが開始されました。 – weismat