是否没有构建方法来取消UdpClient.ReceiveAsync()方法



我有以下方法收听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

相关内容

最新更新