gpt4 book ai didi

multithreading - C#处理线程和阻塞套接字

转载 作者:行者123 更新时间:2023-12-03 13:16:23 25 4
gpt4 key购买 nike

在以下线程中,从客户端读取UDP数据包,直到 bool 字段Run设置为false为止。

如果在Receive方法阻塞时将Run设置为false,则它将永远保持阻塞状态(除非客户端发送数据,否则它将导致线程循环并再次检查Run条件)。

while (Run)
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref remoteEndPoint); // blocking method

// process received data
}

我通常通过在服务器上设置超时来解决此问题。它工作正常,但对我来说似乎是一个不完整的解决方案。
udpClient.Client.ReceiveTimeout = 5000;

while (Run)
{
try
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref remoteEndPoint); // blocking method

// process received data
}
catch(SocketException ex) {} // timeout reached
}

您将如何处理这个问题?有什么更好的办法吗?

最佳答案

使用UdpClient.Close()。这将终止阻塞的Receive()调用。准备捕获ObjectDisposedException,它向您的线程发出套接字已关闭的信号。

关于multithreading - C#处理线程和阻塞套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5525551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com