0

我如何一次执行所有上述任务以提高速度。

self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[0]) 

self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[1]) 

self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[2]) 

self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[3])
4

2 回答 2

1

你所追求的是 DispatchQueue concurrentPerform上的类函数

例如:

DispatchQueue.concurrentPerform(iterations: msgIDBatches.count) { (index) in
    self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[index])    
}

passingMsgIdsTofetchMsgss如果您正在更新 UI 并确保它是线程安全的,那么您显然需要小心回调主队列。使用时间分析器检查这实际上是性能瓶颈所在也是值得的。

另一种选择是OperationQueue,您可以将所有提取添加到队列并同时执行它们。

于 2018-04-11T12:41:14.467 回答
0

斯威夫特 4.1。首先创建一个并发Queue

private let concurrentPhotoQueue = DispatchQueue(label: "App_Name", attributes: .concurrent)

现在将您的工作分派到并发队列

concurrentPhotoQueue.async(flags: .barrier) { [weak self] in
            // 1
            guard let weakSelf = self else {
                return
            }
            // 2 Perform your task here
            weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[0])
            weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[1])
            weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[2])
            weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[3])
            // 3
            DispatchQueue.main.async { [weak self] in
                // Update your UI here
            }
        }
于 2018-10-18T17:21:08.413 回答