?經(jīng)常有這樣的需求:1,有m個網(wǎng)絡請求实愚。2,先并發(fā)執(zhí)行其中n幾個兔辅。3腊敲,待這n個請求完成之后再執(zhí)行第n+1個請求。4然后等 第n+1個請求完成后再并發(fā)執(zhí)行剩下的m-(n+1)個請求维苔。
如果我們用GCD碰辅,可以使用dispatcg_barrier_async 來實現(xiàn),如下:
注意這里的queue 不能是 global_queue
注意看圖片中注釋的哪一行代碼介时,dispatch_global 跟 dispatch_barrier 結(jié)合起來是起不到barrier 的作用的没宾,查閱dispatch_barrier的開發(fā)者文檔我們發(fā)現(xiàn)如下一段描述:
意思是我們傳入的queue 需要時使用dispatch_queue_create創(chuàng)建出來的凌彬,如果我們傳的queue是 串行或 global,那這個方法的行為就跟 dispatch_sync差不多了循衰,如果你對 dispatch_sync(同步執(zhí)行) 不甚了解铲敛,沒關(guān)系,你只需要知道羹蚣,barrier 執(zhí)行的不再是我們預想的順序了原探,dispatch_sync 的一個特點是乱凿,放進去任務就開始執(zhí)行顽素。
如果我們用NSOpeartion,可以使用addDenpency 來實現(xiàn)徒蟆,如下:
可以看到這種方法雖然實現(xiàn)了設定順序胁出,但是并不優(yōu)雅。