当前位置:  开发笔记 > 程序员 > 正文

等待UDPClient.ReceiveAsync超时

如何解决《等待UDPClient.ReceiveAsync超时》经验,为你挑选了2个好方法。

我正在使用如下的UDPClient

dim c = New UDPClient(port)
client.CLient.ReceiveTimeout = 1
await client.ReceiveAsync()

但是,即使我设置了超时,await也不会终止或抛出.这是正常的行为吗?



1> Stephen Clea..:

是.异步方法Socket不会实现超时.如果您需要在异步操作上超时,则必须自己创建它们(例如,使用Task.DelayTask.WhenAny).



2> Hans Passant..:

MSDN库中有关Socket.ReceiveTimeout的文章中明确提到了此问题:

获取或设置一个值,该值指定同步接收调用将超时之前的时间。

重点已添加。使用ReceiveAsync()时,您所做的与同步接收相反。解决方法是使用在调用之前启动并在调用之后停止的System.Timers.Timer。关闭Elapsed事件处理程序中的套接字,以便ReceiveAsync()方法以ObjectDisposed异常终止。

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有