如何在没有操作队列的情况下取消 GCD 中的请求

how to do cancel requests in GCD without operation queue

我正在实施一个 iOS 应用程序,它使用 REST 服务发出请求。我想在拨打新电话时取消所有以前的 REST 电话。没有Operation Queue可以在GCD的全局队列里做吗?谢谢

GCD 不提供 API 来取消块。所以你必须自己实施这个取消。

最简单的方法可能是设置一个全局标志 'canceled' 并在您的块中检查它。如果设置了标志,请立即从您的区块中 return。然后在所有块都完成后,您可以重置标志并将新块排入队列。

尽管这听起来很简单,但这需要一些重要的代码。使用 NSOperationQueue 而不是在普通 GCD 之上重新实现其功能会容易得多。