Сбой приложения при использовании DispatchQueue.main.sync - PullRequest
0 голосов
/ 17 ноября 2018

Я провожу эксперименты с Grand Central Dispatch и столкнулся с падением синхронного задания.

func viewDidLoad() {
    super.viewDidLoad()

    self.testHello()
    print("Task2")
}

func testHello() {
    DispatchQueue.main.sync {
        print("Task1")
    }
}

При выполнении вышеупомянутой функции я сталкиваюсь с крахом.

Пояснения по поводу вышеупомянутого сбоя будут оценены.

1 Ответ

0 голосов
/ 17 ноября 2018

С DispatchQueue.sync Документация:

... эта функция не возвращается, пока блок не закончится. Вызов этой функции и ориентация на текущую очередь приводят к тупику.

Вы уже находитесь в главной очереди, и вы заставляете код выполняться синхронно в главной очереди. Тот факт, что вы находитесь в основной очереди, означает, что никакой другой код не может быть выполнен в очереди прямо сейчас, однако sync ожидает, пока этот код не будет выполнен, поэтому вы блокируете очередь и все ваше приложение.

...