LoginSignup
0
1

More than 1 year has passed since last update.

[Swift] DispatchGroup の実行途中で enter 数と leave 数が同じになっても残りの enter が実行されるか調べた時のメモ

Last updated at Posted at 2021-12-27

結果:実行される


実行したコード:

import Foundation

let dispatchGroup = DispatchGroup()

for i in 0..<3 {

    print(i, "enter start")
    dispatchGroup.enter()
    print(i, "enter did")

    DispatchQueue.main.async {

        DispatchQueue.main.async {

            print(i, "- inner enter start")
            dispatchGroup.enter()
            print(i, "- inner enter did")

            sleep(1)

            print(i, "- inner leave start")
            dispatchGroup.leave()
            print(i, "- inner leave did")

        }

        print(i, "leave start")
        dispatchGroup.leave()
        print(i, "leave  did")
    }

    sleep(1)

}

dispatchGroup.notify(queue: .main) {
    print("notify")
}

結果:

0 enter start
0 enter did
1 enter start
1 enter did
2 enter start
2 enter did
0 leave start
0 leave  did
1 leave start
1 leave  did
2 leave start
2 leave  did
0 - inner enter start
0 - inner enter did
0 - inner leave start
0 - inner leave did
1 - inner enter start
1 - inner enter did
1 - inner leave start
1 - inner leave did
2 - inner enter start
2 - inner enter did
2 - inner leave start
2 - inner leave did
notify

まとめると、

  1. 外側が全部 enter
  2. 外側が全部 leave
  3. 内側がそれぞれ enter → leave
  4. notify

途中で enter 数 == leave 数 になっても、
まだ enter していない部分があれば
notify されないみたい。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1