Имеется сервер класса TcpListener. Он принимает входящие подключения методом BeginAcceptTcpClient (AsyncCallback, Object).
Код написан на основе примера с MSDN.
public static ManualResetEvent tcpClientConnected =
new ManualResetEvent(false);
public static void DoBeginAcceptTcpClient(TcpListener
listener)
{
while(true)
{
tcpClientConnected.Reset();
Console.WriteLine("Waiting for a connection...");
listener.BeginAcceptTcpClient(
new AsyncCallback(DoAcceptTcpClientCallback),
listener);
tcpClientConnected.WaitOne();
}
}
public static void DoAcceptTcpClientCallback(IAsyncResult ar)
{
TcpListener listener = (TcpListener) ar.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(ar);
Console.WriteLine("Client connected completed");
tcpClientConnected.Set();
while(thue)
{
//Прием сообщений от клиента
}
}
Проблема заключается в том, что метод DoAcceptTcpClientCallback(IAsyncResult ar) иногда начинает выполняться в текущем потоке, а не во вновь созданном как это обычно бывает, и тем самым блокирует его и из-за чего прием следующих подключений невозможен. Закономерность и причины проследить не удалось. В чем может быть дело?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нашёл на просторах StackOverflow пример как читать данные из excelНо вылетают ошибки
Когда задан Padding для параграфа, то его формат передается следующей строке, после нажатия EnterИ убрать его получается только вручную