发布版本(.NET 4.6.1)中的程序异常无效

问题描述:

我有一个程序异步处理套接字通信。我已经得到的异常只发生在版本构建中(在构建机器上)。引起该问题的代码是非常简单的程序来启动侦听传入套接字连接:发布版本(.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 

时调用此方法制成瞬间产生的异常。任何想法可能是错误的?

根据MSDN,此异常通知用户无效的IL代码。所以有些东西可能会在框架中被打破。我建议你在Connect.Microsoft上试试你的运气。另外,如果您真的感兴趣并正在寻找快速解决方案,您可能需要检查失败方法链中的IL代码。