- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 UDP 方法,它使用 DispatchQueue 使用以下代码等待回复:
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 永远不会返回,所以我看不到这个过程将如何结束?有没有办法给它预定的运行时间?
最佳答案
无法从外部停止或“杀死”DispatchWorkItem
或 NSOperation
。有一个 cancel()
方法,但它只是将项目或操作的 isCancelled
属性设置为 true。这不会停止项目本身的执行。 Ans 因为 recv
是阻塞的,所以在执行期间无法检查 isCancelled
标志。这意味着 Vadian 发布的答案很遗憾不会做任何事情。
根据Apple docs在 NSOperation.cancel
上:
This method does not force your operation code to stop.
The same去 NSOperationQueue.cancelAllOperations
:
Canceling the operations does not automatically remove them from the queue or stop those that are currently executing.
您可能认为可以使用原始 NSThread
。然而,同样的原则适用于他。您无法从外部确定性地终止线程。
可能的解决方案:超时
我能想到的最好的解决方案是使用套接字的超时功能。我不知道 UDPServer
来自哪里,但也许它有一个内置超时。
可能的解决方案:穷人的超时(发送数据包到本地主机)
您可以尝试的另一种选择是在经过一定时间后向您自己发送一些 UDP 数据包。这样,recv
将接收到一些数据,然后继续执行。这可能被用作“穷人的暂停”。
关于Swift取消DispatchQueue进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54239055/
dispatch_apply将调度队列作为参数,它允许您选择要在哪个队列上执行 block 。 我的理解是,Swift中的DispatchQueue.concurrentPerform是用来代替dis
我试图了解 Dispatch Sync 和 Dispatch Async,我知道它以 GCD 的同步和异步方式执行。但是当我尝试下面的代码时,它给了我奇怪的场景。 我在 Playground 和同步块
当我在主线程上并尝试 DispatchQueue.main.async 时,它不会使应用程序崩溃,但 DispatchQueue.main.sync 会。为什么会这样? 最佳答案 根据 Docs sy
我一直在用DispatchQueue.main.async长时间执行UI相关操作。 Swift 同时提供 DispatchQueue.main.async和 DispatchQueue.main.sy
我正在阅读教程: https://www.raywenderlich.com/148513/grand-central-dispatch-tutorial-swift-3-part-1 并且遇到了 Q
我试图了解 DispatchQueues 的真正工作原理,我想知道假设 DispatchQueues 有自己的管理线程是否安全?例如,让我们以串行队列为例。在我的理解中——因为它是串行的,新任务只能在
So my goal here is to basically perform a query in a while loop and append results of the query to m
我有一个简单的应用程序,其工作原理如下: 应用加载时使用默认图像 收到点击后,将从列表中加载随机图像 如果 5 秒内没有收到点击,我们将重置回默认图像 我正在尝试使用 DispatchQueue 和
我想为不同的 http 请求设置不同的优先级,并且我希望能够立即停止/暂停一些请求,并在我有一个 High 的请求时只执行其中的一些请求 优先级。我打算使用不同的方法,但现在似乎所有方法都已弃用: 1
我正在异步创建图像,然后在主线程上更新 UI。例如 imageLoadingQueue.async { // Creates a new image, caches it. let n
试图制作线程安全数组,但它不像我预期的那样工作 import Foundation import PlaygroundSupport PlaygroundPage.current.needsIndef
我需要在 Swift 中执行搜索操作,我需要使用 UISearchbar。 在 textDidChange 事件中,我需要调用 Web API,解析响应,然后更新数组,然后开始搜索更新后的数组。 但不
我对 DispatchQueue 东西(包括 DispatchGroups、Qos 等)不是很熟悉。我现在有一个担忧。就像,我有一个 ViewController 被重用于 Android 的 Vie
我正在尝试延迟循环某些内容(只是作为概念证明)这是为了其他目的。但为了简化它,这里有一个例子。 所以在这个例子中,我有一个带有“文本”的字符串,我想循环添加另一个字符串,比方说 10 次。唯一的问题是
我正在尝试创建一个使用 USPS API 获取数据的简单包裹跟踪应用程序。 callRestService 方法成功获取数据,其完成处理程序 serviceCallback(设置 unparsedXm
好吧,我已经经历了大量的问题和答案,我知道对它的理解,但是当我尝试一些代码时,我得到了一些不符合这些理论的结果。 目前我的理解: Sync:一旦 block 内的所有任务都被执行,控制将返回。 异步:
我正在为一个应用程序项目编写一个简单的缓存框架,并在闭包中使用 GCD 和 DispatchQueues 来保存和检索框架中的对象。 在编程时,我一次又一次地质疑自己是否正确地完成了它。这是我正在做的
我有这段代码: DispatchQueue.main.asyncAfter(deadline: .now() + (delay * Double(isDelayAccounted.hashVa
这是一个奇怪的问题,我似乎找不到任何帮助。在 Swift 3 上,尝试调用主线程我尝试使用 DispatchQueue.main.async,但它无法编译。 任何想法都会有所帮助。 最佳答案 试试这段
在 Swift 3 中,创建 DispatchQueue 实例: DispatchQueue(label: String, qos: DispatchQoS,
我是一名优秀的程序员,十分优秀!