Estouro de pilha ao usar o modelo System.Net.Sockets.Socket.AcceptAsync

Com relação a C # e .NETSystem.Net.Sockets.Socket.AcceptAsync método, seria necessário manipular um valor de retorno "false" para manipular o valor imediatamente disponívelSocketAsyncEventArgs estado da conexão processada de forma síncrona. A Microsoft fornece exemplos (encontrados noSystem.Net.Sockets.SocketAsyncEventArgs classe) que causará um estouro de pilha se houver uma grande quantidade de conexões pendentes, que podem ser exploradas em qualquer sistema que implemente seu modelo de manipulação.

Outras idéias para contornar esse problema são criar um loop que chama o método manipulador, com a condição de que o valorSocket.AcceptAsync retornos é igual a false e interrompe o loop (para permitir processamento adiado) se o valor estiver indicando que a operação está sendo concluída de forma assíncrona (true). No entanto, essa solução também causa uma vulnerabilidade de estouro de pilha devido ao fato de o retorno de chamada associado aoSocketAsyncEventArgs passado paraSocket.AcceptAsync no final do método, uma chamada paraSocket.AcceptAsync, que também possui um loop para conexões imediatamente disponíveis e aceitas de forma síncrona.

Como você pode ver, esse é um problema bastante sólido e ainda não encontrei uma boa solução que não envolvaSystem.Threading.ThreadPool e criando vários outros métodos e agendamento de processamento. Tanto quanto posso ver, o modelo de soquete assíncrono relacionado aSocket.AcceptAsync requer mais do que é demonstrado nos exemplos no MSDN.

Alguém tem uma solução limpa e eficiente para lidar com conexões imediatamente pendentes que são aceitas de forma síncrona a partir do Socket.AcceptAsync sem precisar criar threads separados para lidar com as conexões e sem utilizar recursão?

questionAnswers(4)

yourAnswerToTheQuestion