Странные проблемы у вас. Тут же классическая модель с frontend и backend-ами. Придумываешь самый минималистический интерфейс общения с backend-ом (вероятно, методы configure(), startScanning(), getResult() и сигнал dataReady() ) и — вперёд.
Ну да, фронтенд, считай, говорит бэкэнду startScanning() А потом ожидает получения данных. Затем не getResult() каждые 5 сек/5 мину от бэкэнда, а именно хочу получить оповещение онлайн, что данные пришли, вот они, отображай.
вот и нет! Frontend запускает операцию и ничего не ждёт. Backend присылает сигналы о готовности данных — либо всех по окончании, либо по мере готовности у него. Frontend эти сигналы обрабатывает как ты считаешь нужным.
Это как раз модель изоляции задач. Рекомендую. Кстати, frontend и core тоже можно разделить. Кстати, ты чего сканируешь? Если какие-нибудь qr или похожее, то там другой вопрос: кто сервер, а кто клиент.
Там вообще всё можно сделать атомарным. Только это вообще-то input device, тут другая логика требуется. Но, с другой стороны, там достаточно единственного сигнала dataReady(), который, наверное, можно обработать даже синхронно.