首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS swift中异步/并发/并行运行任务

在iOS swift中异步/并发/并行运行任务
EN

Stack Overflow用户
提问于 2018-04-11 20:29:29
回答 2查看 574关注 0票数 0

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

代码语言:javascript
复制
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[0]) 

self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[1]) 

self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[2]) 

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

回答 2

Stack Overflow用户

发布于 2018-04-11 20:41:14

您需要的是DispatchQueue concurrentPerform上的类函数

例如:

代码语言:javascript
复制
DispatchQueue.concurrentPerform(iterations: msgIDBatches.count) { (index) in
    self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[index])    
}

如果要更新UI,显然需要小心在主队列上回调,同时还要确保passingMsgIdsTofetchMsgss是线程安全的。同样值得使用time profiler检查的是,这实际上是性能瓶颈所在。

另一个选项是OperationQueue,您可以将所有的fetches添加到一个队列中,并同时执行它们。

票数 1
EN

Stack Overflow用户

发布于 2018-10-19 01:21:08

Swift 4.1。首先创建一个并发队列

代码语言:javascript
复制
private let concurrentPhotoQueue = DispatchQueue(label: "App_Name", attributes: .concurrent)

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

代码语言:javascript
复制
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
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49775203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档