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