Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Отличная статья, Спасибо.
Было бы неплохо написать вторую часть об RxSwift.
НИКОГДА НЕ вызывайте метод sync на main queue, потому что это приведет к взаимной блокировке (deadlock) вашего приложения!
Do not call the dispatch_sync function from a task that is executing on the same queue that you pass to your function call. Doing so will deadlock the queue. If you need to dispatch to the current queue, do so asynchronously using the dispatch_async function.
let queue = DispatchQueue(label: "com.tursunov.app.exampleQueue")
queue.async {
// ...
queue.sync { // deadlock
// ...
}
}
let queue = DispatchQueue(label: "com.tursunov.app.exampleQueue")
queue.async {
// ...
DispatchQueue.main.sync { // there's no deadlock
// ...
}
// ...
}
«Барьеры GCD делают одну интересную вещь — они ожидают момента, когда очередь будет полностью пуста, перед тем как выполнить свое замыкание.»
Класс Operation
имеет метод cancel()
, однако использование этого метода только устанавливает свойство isCancelled
в true
, а что семантически означает «удаление» операции можно определить только при создании subclass Operation
. Например, в случае загрузки данных из сети можно определить cancel()
как отключение операции от сетевого взаимодействия.
Посмотрите мою другую статью "Concurrency в Swift 3 и 4. Operation и OperationQueue" в Habr, специально посвященную Operation.
https://habr.com/ru/post/335756/
По-моему там есть пример.
Многопоточность (concurrency) в Swift 3. GCD и Dispatch Queues