• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

concurrency_1 강의 코드 결과 중 이해가 안가는 부분이 있습니다

23.06.25 15:43 작성 조회수 191

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의 우선순위가 낮아진다고 이해하시면 될 것 같습니다.