Поток прослушивателя C # UDP — не записывает процессор с помощью while (true)?

#c# #sockets #network-programming #udp

#c# #сокеты #сетевое программирование #udp

Вопрос:

С помощью следующего кода есть ли лучший способ настроить прослушивание UDP, чем while(true) с Thread.Sleep(10) ?

     public void Start()
    {
        socket.Bind(ip);
        while (true)
        {
            data = new byte[1024];
            receivedDataLength = socket.ReceiveFrom(data, ref Remote);
            raw = Encoding.ASCII.GetString(data, 0, receivedDataLength);
            row = new LogRow(raw);
            //Console.WriteLine(row.ClientIp);
            row_queue.Enqueue(row);
            Thread.Sleep(10);
        }
    }
  

Ответ №1:

ReceiveFrom блокируется. Поток будет приостановлен до поступления данных. Если Socket не находится в неблокирующем режиме.

Комментарии:

1. Вы должны добавить, что, поскольку ReceiveFrom блокируется, в Sleep этом нет необходимости.

2. Ах да, должно быть, это мой поток вставки, который записывает процессор. Спасибо, я удалю sleep .

3. @Кайл Брандт ♦ да, Spleep это чрезмерно. Запустите приложение в режиме отладки, а когда начнется запись, приостановите отладку и проверьте каждый поток, не прерывающийся.