Проблема в том, что вы вызываете sleep
, который является синхронно блокирующей функцией, поэтому вы блокируете основной поток на 5 секунд, и в это время больше ничего не может быть выполнено. Вы должны использовать DispatchQueue.asyncAfter
для проверки простых асинхронных вызовов.
Вы также можете знать, что ваша функция не асинхронная, поскольку вы не получили ошибку компилятора за то, что вы не отметили свое закрытие как @escaping
, что вам нужно сделать для обработчиков асинхронного завершения.
func doAsyncStuff(completionHandler: @escaping (_ result: Double) -> Void) {
print("start async")
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
completionHandler(123.456)
}
}