작성
·
248
0
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
start()
}
func simpleWork() {
print("doing simple work")
}
func someWork() async -> Int {
try? await Task.sleep(nanoseconds: 1000 1000 1000 * 3)
return 10
}
func start() {
Task {
print("start !")
let num = await someWork()
print(num)
print("finish !")
}
simpleWork()
}
}
concurrency_1 강의를 듣고 위의 코드를 playground가 아닌 project파일을 만들어서 실행시켜보았습니다.
저는 아래와 같은 결과가 나올거라 예상했었습니다.
start !
doing simple work
10
finish
그런데 빌드를 시켜서 터미널에 뜨는 것을 보니 아래와 같은 결과가 나옵니다.
doing simple work
start !
10
finish !
Task 자체를 통째로 아예 비동기 작업으로 인식해서 이런 결과가 나오는 것일까요??
결과가 이렇게 나오는 이유를 잘 모르겠습니다🥲
답변 1
1
안녕하세요
우선 Task 블록은 비동기 동작이 맞습니다.
그래서 보통은 Task블록과 일반코드가 있을 때 어떤게 먼저 실행될지는 상황에 따라 달라집니다.
그러나 일반코드가 무조건 먼저 실행되는 조건이 있습니다.
UIImage, UIView, UIViewController 같은 화면으로 구성되는 클래스를 상속받을 때는 무조건 일반코드가 먼저 실행됩니다.
이 때는 Task의 우선순위가 낮아진다고 이해하시면 될 것 같습니다.