gpt4 book ai didi

swift - 如果主队列始终同步,为什么 dispatchQueue.main 会给我同步或异步选项

转载 作者:搜寻专家 更新时间:2023-11-01 06:02:35 24 4
gpt4 key购买 nike

如果主队列始终同步,为什么 dispatchQueue.main 给我选择同步或异步

dispatchQueue.main.async{
//code
}

dispatchQueue.main.async{
//code
}

相同
dispatchQueue.main.sync{
//code
}

dispatchQueue.main.sync{
//code
}

所以我想知道有什么不同

最佳答案

main 队列与任何其他队列在同步或异步入队方面没有什么不同。

您必须遵守的唯一规则是永远不要使用 sync 将某些内容排队到当前正在使用的同一队列中。这将导致僵局。同样,无论队列是主队列还是其他队列,都是如此。

回答你的问题“是一样的” - 不,它不一样。假设两组代码都是从某个后台队列调用的,在第一组代码中,后台队列将继续移动,而不管这两个 block 最终何时在主队列上执行。在第二组代码中(使用sync),后台队列每次阻塞,直到每个代码块都在主队列上运行。

如果两组代码都是从主队列调用的,那么会有更大的区别。第一组代码(使用 async)继续工作。第二组代码(使用 sync)将导致主队列在第一次调用 sync 时阻塞,您的应用将变得无响应,直到用户(或操作系统)杀死它。

主队列和其他队列之间唯一可能相关的区别是主队列始终是串行队列,而后台队列可以是串行的或并发的。但是只要您避免在两个队列相同的地方使用 sync,它们都可以有效地使用 syncasync

关于swift - 如果主队列始终同步,为什么 dispatchQueue.main 会给我同步或异步选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45199396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com