let serialQueue = DispatchQueue(label: "serial.queue")
serialQueue.sync {
print("current thread = \(Thread.current)") // current thread = _NSMainThread
}
< /code>
В документации для sync () я обнаружил следующее оператор: < /p>
В качестве оптимизации производительности эта функция выполняет блоки в текущем потоке
, когда это возможно, с одним исключением: блоки, представленные
на основную диспетчерскую Queue, всегда запуская в основном потоке. /> На основании этого описания я предположил, что если блок действительно был выполнен в текущем потоке (в этом случае основной поток), тогда должен был произойти тупик. Поскольку он синхронно, основной поток заблокируется до завершения блока. /> , но вопреки моим ожиданиям, никакого тупика не произошло, и код был выполнен просто в порядке. Я не могу выяснить, почему. < /P>
question.
- Почему блок выполняется в основном потоке, даже если он был представлен в пользовательскую серийную очередь? Case? Я хотел бы понять, как именно работает основная поток.
Подробнее здесь: https://stackoverflow.com/questions/797 ... a-deadlock
Мобильная версия