我正在构建一个多线程应用程序。其中一个线程负责处理来自外部硬件的 UDP 消息。我目前正在循环使用 UdpClient.Receive 方法。我相信 Receive 方法在等待下一条消息时会阻塞线程。如果我想关闭所有线程并优雅地停止应用程序,我有一个共享变量 (_isCancelled)。但是,由于此 Receive 方法会阻塞,因此如果与外部硬件的通信丢失,我将无法正常关闭应用程序。这是当前的代码循环
UdpClient _client = new UdpClient(8000);
IPEndPoint _endPoint = new IPEndPoint(IPAddress.Any, 8000);
while (!_isCancelled)
{
byte[] _bytes = _client.Receive(ref _endPoint);
...process data...
}
我在想我应该改用异步接收方法。但我不完全确定我理解这些是如何工作的,以及我应该如何构建我的代码。我希望能够持续接收数据并进行处理。并且在任何时候我都希望能够通过将 _isCancelled 设置为 true 来优雅地关闭线程。如果由于某种原因我们失去了与外部硬件的通信或不再收到任何消息,我们仍然应该能够优雅地关闭线程。