Нет явного предоставления в очереди отправки для завершения.Для этого достаточно проверить место эвакуации, чтобы определить завершение.По сути, это был бы семафор.
NSOperationQueue
(абстракция более высокого уровня, но все же сборка с использованием GCD внизу) действительно поддерживает отмену операций.Так, например, вы можете создать серию NSOperations и добавить их в NSOperationQueue, а затем отправить сообщение -cancelAllOperations
в очередь, когда вам не нужно его завершать.
Большая часть выбранной вами архитектурыбудет зависеть от того, сколько из них работает и имеют ли они разные триггеры.Среди реализаций NSOperation, вероятно, является «самым чистым» решением, поскольку у вас есть произвольная очередь, в которой вы можете наблюдать за завершением операций, а также вы можете отменить невыполненные операции.Вниз по шкале взлома будет изменчивое местоположение, которое каждый из этих блоков будет наблюдать внутри узкой петли, чтобы определить, не собираются ли они закончить преждевременно.Еще дальше будет глобальная переменная для той же базовой функции.
В конце концов, даже реализация NSOperation включает тест для выхода в согласованном месте (поскольку простое уничтожение потока может привести к несогласованностив данных, которые используются или в распределениях / переобучениях).