通过信号量实现异步调用转同步

栏目: IT技术 · 发布时间: 6年前

在 iOS 开发中,我们通常会通过 delegate 或者 block 的方式来实现异步回调。如图 1 所示,在异步方法 doSomethingWithCallback: 中执行一些耗时操作,然后通过执行 callback block 将结果返回给调用者,并执行后续的逻辑。

通过信号量实现异步调用转同步

这是一种很常见的写法,它的好处就是使代码看起来很紧凑,统一在回调 block 中处理异步结果,但缺点就是,如果结果处理逻辑很复杂,就会使 callback block 里的代码很冗长,且如果结果处理过程中又需要调用其他异步方法,很容易出现 block 嵌套的情况。

下面介绍介绍一种通过信号量 semaphore 把异步调用转成同步调用的方式,代码如图 2 中红框所示:我们先创建一样信号量,初始值为 0,然后调用异步方法,接着通过 dispatch_semaphore_wait 实现加锁等待,在回调 block 中保存结果数据,并通过 dispatch_semaphore_signal 实现解锁,最后再统一处理结果,整个流程看起来就相当于一次同步调用了。

通过信号量实现异步调用转同步

虽然使用起来有点麻烦,但是在有些场景下我们确实可能需要把异步逻辑转成同步,希望能帮到你。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

An Introduction to Probability Theory and Its Applications

An Introduction to Probability Theory and Its Applications

William Feller / Wiley / 1991-1-1 / USD 120.00

Major changes in this edition include the substitution of probabilistic arguments for combinatorial artifices, and the addition of new sections on branching processes, Markov chains, and the De Moivre......一起来看看 《An Introduction to Probability Theory and Its Applications》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具