У меня есть инструмент на Mac, который имеет интерфейс обработки данных, веб-интерфейс и пользовательский интерфейс.Эти три интерфейса работают в трех различных последовательных (асинхронных) dispatch_queues. (Пользовательский интерфейс запускается в главной очереди)
Мой интерфейс обработки данных должен остановиться, когда веб-интерфейс получает команду Стоп.Обработка данных dispatch_block не имеет каких-либо зависимостей, за исключением того, что она должна прослушивать команду Stop из веб-интерфейса.
Меня смущает вопрос о том, как мне спроектировать блок данных, чтобы мне не приходилось опрашивать веб-интерфейс, чтобы убедиться, что он получил команду Stop.Стек для моего блока данных довольно глубокий (много вызовов функций), и я не хочу проверять каждую функцию, если Stop был вызван.Цель состоит в том, чтобы как можно скорее остановиться, когда я получу команду Stop .
Я не могу положиться на isCancelled
метод NSOperationBlock
, поскольку мой блок данных всегда работает, пока не получит Стоп.
Моя цель здесь не в том, чтобы спроектировать интерфейсы влучше, но быстро выйти из блока данных, когда я получаю команду Stop .
Я знаю, что это давняя проблема того, как избегать постоянной проверки переменной.Просто было интересно, есть ли что-нибудь, что можно было бы сделать.
Все предложения приветствуются.