dispatch_barrier_async和dispatch_

2019-04-11  本文已影响0人  d5cbd4f07363

直接看代码
dispatch_barrier_sync的使用


屏幕快照 2019-04-11 10.04.59.png

看一下输出结果:


屏幕快照 2019-04-11 10.05.41.png

我们可以看到:

Task1,2,3不是顺序执行的因为是异步,但是都在barrier的前面,Task4,5在barrier的后面执行。
aa和bb都在主线程进行输出。
执行完barrier,才会将后面的任务4,5插入到队列执行。

dispatch_barrier_async
测试代码:


屏幕快照 2019-04-11 10.08.06.png

测试结果:


屏幕快照 2019-04-11 10.08.53.png

大家可以看到:

Task1,2,3不是顺序执行的因为是异步,但是都在barrier的前面,Task4,5在barrier的后面执行。
aa和bb都在主线程进行输出。
不用执行完barrier,就可以将任务4,5插入到队列中,但是仍然需要执行完barrier,才会执行任务4和5。

总结
你也可以这么理解,它们二者的差别在于插入barrier后面任务的时机不同。后面任务执行顺序都要在barrier之后,这一点是相同的。

  1. 相同点

等待在它前面插入队列的任务先执行完
等待他们自己的任务执行完再执行后面的任务

  1. 不同点

dispatch_barrier_sync将自己的任务插入到队列的时候,需要等待自己的任务结束之后才会继续插入被写在它后面的任务,然后执行它们。
dispatch_barrier_async将自己的任务插入到队列之后,不会等待自己的任务结束,它会继续把后面的任务插入到队列,然后等待自己的任务结束后才执行后面任务。

上一篇 下一篇

猜你喜欢

热点阅读