異步順序執(zhí)行

要求:異步耗時操作:ADC先完成拙毫,再完成DE帕识,最后完成FGHI

1本缠、任務(wù)組(DispatchGroup)實現(xiàn)

    func testWorkItem() {
        let item0 = creatWorkItem(tag: "A")
        let item1 = creatWorkItem(tag: "B")
        let item2 = creatWorkItem(tag: "C")
        
        let item3 = creatWorkItem(tag: "D")
        let item4 = creatWorkItem(tag: "E")
        
        let item5 = creatWorkItem(tag: "F")
        let item6 = creatWorkItem(tag: "G")
        let item7 = creatWorkItem(tag: "H")
        let item8 = creatWorkItem(tag: "I")
        
        let queue = DispatchQueue(label: "processQueueName1", attributes: .concurrent)
        let group = DispatchGroup.init();
        
        queue.async(group: group, execute: item0)
        queue.async(group: group, execute: item1)
        queue.async(group: group, execute: item2)
        item0.notify(queue: queue) {
            print("A完成--- \(Thread.current)")
        }
        item1.notify(queue: queue) {
            print("B完成--- \(Thread.current)")
        }
        item2.notify(queue: queue) {
            print("C完成--- \(Thread.current)")
        }
        
        item3.notify(queue: queue) {
            print("D完成--- \(Thread.current)")
        }
        item4.notify(queue: queue) {
            print("E完成--- \(Thread.current)")
        }
        
        item5.notify(queue: queue) {
            print("F完成--- \(Thread.current)")
        }
        item6.notify(queue: queue) {
            print("G完成--- \(Thread.current)")
        }
        item7.notify(queue: queue) {
            print("H完成--- \(Thread.current)")
        }
        item8.notify(queue: queue) {
            print("I完成--- \(Thread.current)")
        }
        
        group.notify(queue: queue) {
            print("第一組完成--- \(Thread.current)")
            queue.async(group: group, execute: item3)
            queue.async(group: group, execute: item4)
            
            group.notify(queue: queue, execute: {
                print("第2組完成--- \(Thread.current)")
                queue.async(group: group, execute: item5)
                queue.async(group: group, execute: item6)
                queue.async(group: group, execute: item7)
                queue.async(group: group, execute: item8)
                
                group.notify(queue: queue, execute: {
                    print("第3組完成--- \(Thread.current)")
                })
            })
        }
    }
   
    func creatWorkItem(tag: String) -> DispatchWorkItem{
        let item = DispatchWorkItem.init {
            print("\(tag)==========start")
            for idx in 1..<5
            {
                print("\(tag):\(idx) --- \(Thread.current)")
                sleep(1)
            }
            print("\(tag)==========end")
        }
        return item
    }

2、柵欄函數(shù)

   func testWorkItem1() {
        let item0 = creatWorkItem(tag: "A")
        let item1 = creatWorkItem(tag: "B")
        let item2 = creatWorkItem(tag: "C")
        
        let item3 = creatWorkItem(tag: "D")
        let item4 = creatWorkItem(tag: "E")
        
        let item5 = creatWorkItem(tag: "F")
        let item6 = creatWorkItem(tag: "G")
        let item7 = creatWorkItem(tag: "H")
        let item8 = creatWorkItem(tag: "I")
        
        let queue = DispatchQueue(label: "processQueueName1", attributes: .concurrent)
        let group = DispatchGroup.init();
        
        queue.async(group: group, execute: item0)
        queue.async(group: group, execute: item1)
        queue.async(group: group, execute: item2)
        
        queue.async(flags: .barrier) {
            print("======第一組完成======")
        }
        
        queue.async(group: group, execute: item3)
        queue.async(group: group, execute: item4)
        queue.async(flags: .barrier) {
            print("======第二組完成======")
        }

        queue.async(group: group, execute: item5)
        queue.async(group: group, execute: item6)
        queue.async(group: group, execute: item7)
        queue.async(group: group, execute: item8)
        
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沙咏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子班套,更是在濱河造成了極大的恐慌肢藐,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吱韭,死亡現(xiàn)場離奇詭異吆豹,居然都是意外死亡,警方通過查閱死者的電腦和手機理盆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門痘煤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猿规,你說我怎么就攤上這事衷快。” “怎么了姨俩?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵蘸拔,是天一觀的道長。 經(jīng)常有香客問我环葵,道長调窍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任积担,我火速辦了婚禮陨晶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帝璧。我一直安慰自己先誉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布的烁。 她就那樣靜靜地躺著褐耳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渴庆。 梳的紋絲不亂的頭發(fā)上铃芦,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音襟雷,去河邊找鬼刃滓。 笑死,一個胖子當(dāng)著我的面吹牛耸弄,可吹牛的內(nèi)容都是我干的咧虎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼计呈,長吁一口氣:“原來是場噩夢啊……” “哼砰诵!你這毒婦竟也來了征唬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤茁彭,失蹤者是張志新(化名)和其女友劉穎总寒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體理肺,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡摄闸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妹萨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贪薪。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眠副,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竣稽,我是刑警寧澤囱怕,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站毫别,受9級特大地震影響娃弓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岛宦,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一台丛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砾肺,春花似錦挽霉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至裙盾,卻和暖如春实胸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背番官。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工庐完, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徘熔。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓门躯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親近顷。 傳聞我的和親對象是個殘疾皇子生音,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容