【发布时间】:2019-06-11 20:06:28
【问题描述】:
我有一个使用 DispatchQueue 等待回复的 UDP 方法,该方法使用以下代码:
DispatchQueue.global(qos: .userInitiated).async {
let server:UDPServer=UDPServer(address:"0.0.0.0", port:5005)
let (data,_,_) = server.recv(1024)
DispatchQueue.main.async {
...
}
}
这非常有效,并启动了一个等待我的数据进入的过程。让我彻夜难眠的原因是如果我们从未得到回复会发生什么? server.recv 永远不会返回,所以我看不到该过程将如何结束?有没有办法给它预定的运行时间?
【问题讨论】:
-
查看这篇文章中的讨论:stackoverflow.com/questions/38105105/…
-
它没有我知道的内置超时功能。我唯一能想到的是使用
cancel()并从回调内部检查isCancelled属性。但是,如果recv被阻塞,这将不起作用。 -
UDPServer是如何实现的?recv长什么样子?没有看到实际的阻塞代码很难给你建议。 -
我正在使用 SwiftSockets。
-
看了一下
SwiftSockets,看起来你想要的是不可能的,因为SwiftSockets不提供stackoverflow.com/questions/13547721/udp-socket-set-timeout中指定的功能
标签: swift dispatch-queue