Swift Threading with DispatchGroup(使用DispatchGroup进行快速线程处理)
本文介绍了使用DispatchGroup进行快速线程处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码,它使用DispatchGroup
在任务完成时收到通知:
func getSomething(completion: ()->()) {
completion()
}
func doSomeWork(completion: ()->()) {
let myGroup: DispatchGroup = DispatchGroup()
for _ in 0..<10 {
myGroup.enter()
getSomething {
myGroup.leave()
}
}
myGroup.notify(queue: DispatchQueue.main) { // this here is the key
completion()
}
}
DispatchQueue.global().async {
print("We are doing background work")
doSomeWork {
print("We are done with the work - but on main thread now!!!")
}
}
所以我的问题是,我在线程上调用某个函数,该函数有一个在某个固定队列上调用的完成。
我的选项是:
- 检测Thread.isMainThread并在主队列或后台队列上通知
- 为所有函数调用传递我们正在处理的队列 问题:这不是一个真正的智能设计模式
- 处理此完成有固定队列的情况,然后再次手动调度
但我对任何选项都不满意...我不想收到这么多急件。
想象一下:
DispatchQueue.global().async {
print("We are doing background work")
doSomeWork {
DispatchQueue.global().async {
print("Now we are in background again")
}
}
}
这已经是一个级别3的闭包,使用起来并不是很好,特别是如果在后台异步调用中我们有另一个闭包或级别。
任何关于在这里做什么的帮助都是很棒的!谢谢您
推荐答案
问题是,我正在调用一个函数bla({//块代码 后台队列。Bla()在Main上调用完成处理程序 线程,由于分派组-Janosch Hübner
再次检查您的代码段
func doSomeWork(completion: ()->()) {
let myGroup: DispatchGroup = DispatchGroup()
for _ in 0..<10 {
myGroup.enter()
getSomething {
myGroup.leave()
}
}
myGroup.notify(queue: DispatchQueue.main) { // this here is the key
completion()
}
}
请看,因为getSomething
是同步的,所以您可以简单地编写
func doSomeWork(completion: ()->()) {
//let myGroup: DispatchGroup = DispatchGroup()
for _ in 0..<10 {
//myGroup.enter()
getSomething {
//myGroup.leave()
}
}
//myGroup.notify(queue: DispatchQueue.main) { // this here is the key
completion()
/
织梦狗教程
本文标题为:使用DispatchGroup进行快速线程处理


基础教程推荐
猜你喜欢
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01