Wait for all Operations in queue to finish before performing task

前端 未结 6 1906
小鲜肉
小鲜肉 2021-01-02 07:29

I have an Operation subclass and Operation queue with maxConcurrentOperationCount = 1.

This performs my operations in a sequential order that i add them which is goo

6条回答
  •  无人及你
    2021-01-02 07:39

    You can use operation dependencies to initiate some operation upon the completion of a series of other operations:

    let queue = OperationQueue()
    
    let completionOperation = BlockOperation {
        // all done
    }
    
    for object in objects {
        let operation = ...
        completionOperation.addDependency(operation)
        queue.addOperation(operation)
    }
    
    OperationQueue.main.addOperation(completionOperation)  // or, if you don't need it on main queue, just `queue.addOperation(completionOperation)`
    

    Or, in iOS 13 and later, you can use barriers:

    let queue = OperationQueue()
    
    for object in objects {
        queue.addOperation(...)
    }
    
    queue.addBarrierBlock {
        DispatchQueue.main.async {
            // all done
        }
    }
    

提交回复
热议问题