我有以下方法收听UDP广播:
private async Task ReciveBroadCast()
{
var recv = await udpReceiver.ReceiveAsync();
var remoteEndPoint = recv.RemoteEndPoint;
string message = Encoding.ASCII.GetString(recv.Buffer); //TODO: Do something with this message
var answer = "ok";
var answerBuffer = Encoding.UTF8.GetBytes(answer);
udpReceiver.Send(answerBuffer, 2, remoteEndPoint);
}
用户按下按钮即可开始收听广播。我也希望能够停止侦听,但是似乎没有办法取消ReceiveAsync()
方法。
到目前为止,我能找到的唯一答案来自这篇文章:如何使UdpClient.ReceiveAsync((可取消?
我想知道我是否错过了更好的方法(因为链接的帖子已经有好几年的历史了(?或者,如果不能定期检查Cancellation Token,可能有一种方法可以立即取消异步方法?
此功能已添加到.NET 6:中
https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.udpclient.receiveasync?view=net-6.0#系统网络套接字udpclient receiveasync(系统线程取消令牌(
我最近在一个.Net Core 3.1项目中遇到了这个问题;除了直接访问套接字(UdpClient.Client
(之外,没有什么好的方法可以解决这个问题,但在.NET6中提供它是很好的,因为许多项目都可以(也将(升级。
以下是GitHub上的相关讨论,以防您还无法升级:
https://github.com/dotnet/runtime/issues/921#issuecomment-498299946