У нас есть производственное приложение, которое должно быть многопоточным слушателем сокетов.Я начинаю сомневаться, потому что журналы, которые генерирует приложение, заставляют его выглядеть так, как будто он обрабатывает потоки, которые он получает синхронно.Чтобы не вставлять здесь стенку кода, я предоставлю первую часть предположительно асинхронного tcp-кода: это правильная практика?
/// <summary>
/// Start an Asynchronous Socket to listen for connections.
/// </summary>
public static void StartListening()
{
Socket listenerSocket = null;
try
{
var ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
var ipAddress = ipHostInfo.AddressList[Socket.OSSupportsIPv6 ? 1 : 0];
//Create TCP/IP Socket
listenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listenerSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
listenerSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 1);
//Bind the socket to the local endpoint and listen for incoming connections.
//listenerSocket.Bind(new IPEndPoint(ipAddress, m_client.RemotePort));
listenerSocket.Bind(new IPEndPoint(ipAddress, Int32.Parse(ConfigurationManager.AppSettings["ListenerPort"])));
listenerSocket.Listen(m_maxSocketConnections);
while (true)
{
//Set the event to nonsignaled state
m_pAllDone.Reset();
//Start an asynchronous socket
listenerSocket.BeginAccept(new AsyncCallback(AcceptCallback), listenerSocket);
//Wait until a connection is made and processed before continuing
m_pAllDone.WaitOne();
}
}