取消对 OperationQueue 的所有操作

Cancelling all operations on OperationQueue

当取消队列中的所有操作时,如文档所述,一些操作可能仍留在队列中,这很好。但是,假设从 maxConcurrentOperationCount = 1 队列中的 5 个操作开始。第二个操作失败,然后我调用 cancelAllOperations()。当我检查队列时,里面还有一个操作。然后在应用程序中我拉动刷新我想重复这个过程,但是之前的操作还剩下什么?我想重用同一个队列。有什么建议吗?

取消不是从队列中删除操作的事情。触发它们删除的是将操作的 finished 设置为 true。一旦队列看到 finished 移动到 true,它就会从队列中删除操作。如果某个操作仍在队列中,可能是它的 finished 设置不正确。

即使设置 isExecuting = falseisFinished = true 操作仍在队列中。我所做的是在取消请求后再次重新初始化队列。这样操作是 "deleted" 并且队列是空的。