2016-09-20 12 views
0

ソケット通信を非同期に処理するプログラムがあります。私が得ている例外はリリースビルド(ビルドマシン上)でのみ発生します。問題の原因となるコードは、着信ソケット接続の待機を開始するには、本当に簡単なルーチンです:リリースビルド(.NET 4.6.1)で無効なプログラム例外

public async Task Listen() 
    { 
     try 
     { 
      var endpoint = new IPEndPoint(IPAddress.Loopback, Port); 
      using (Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) 
      { 
       Socket.Bind(endpoint); 
       Socket.Listen(Limit); 
       while (!Shutdown) 
       { 
        var socket = await Socket.AcceptAsync().ConfigureAwait(false); 

        // some code handling connection 

        var result = await Socket.ReceiveAsync(state).ConfigureAwait(false); 
        Received(result, state); 
       } 
      } 
     } 
     catch (ObjectDisposedException) {} 
     catch (Exception ex) when (ex is SocketException || ex is ApplicationException || ex is ThreadAbortException) 
     { 
      OnError?.Invoke(this, ex); 
      Dispose(); 
     } 
    } 

AcceptAsyncとReceiveAsyncがTask.Factory.FromAsyncとTPLパターンを使用して拡張メソッドです。正確な例外は以下の通りです:これは中に発生するように見える

Exception Type:  System.InvalidProgramException 
Exception Message:  Common Language Runtime detected an invalid program. 

System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start 

を呼び出しがこのメソッドに行われたときに例外が瞬時に生成されます。どのようなアイデアが間違っているかもしれない?

答えて

0

MSDNによると、この例外は無効ILコードについてユーザーに通知します。だから、フレームワークで何かが壊れる可能性があります。あなたの運を試してみることをお勧めしますConnect.Microsoft。また、あなたが本当に関心があり、迅速な修正を探しているなら、失敗したメソッドのチェーンのILコードを調べたいかもしれません。

関連する問題