Динамически цепочка один ко многим объектам `OneTimeWorkRequest`

Есть много способов цепочки WorkRequest объекты. Параллельно, последовательно и даже объединяя несколько работ.

Несмотря на то, что этот API кажется очень гибким, я не смог найти способ решить следующую задачу:

Первый Worker отвечает за сбор информации, в конце своего выполнения выводит список имен файлов, которыми следует манипулировать. После этого я хотел бы сделать манипуляции с каждым из этих файлов. Так что я представляю Worker это ответственно за манипулирование одним файлом. Но я не мог найти способ передать вывод каждого имени файла с первого Worker на несколько манипулятор Worker объекты. (Должен быть один манипулятор WorkRequest для каждого из файлов, и они WorkRequest объекты должны работать параллельно).

Как можно WorkRequest создать динамическое число WorkRequestобъекты на основе его вывода?

1 ответ

Решение

Я не знаю ни одного способа поставить в очередь динамическое число WorkRequest. Идея состоит в том, что вы создаете цепочку WorkRequests, которая является фиксированной и может обрабатываться WorkManager в целом (если каждый работник добивается успеха).

Для этого конкретного случая я, вероятно, попытаюсь создать необходимое количество рабочих запросов (по одному на файл), когда начальный рабочий запрос будет успешным.

Вы можете поставить больше работы изнутри Worker, Так что в конце первого Worker Вы можете поставить в очередь других рабочих в зависимости от файлов, которые вы хотите обработать. Вы также можете посмотреть на enqueueUniqueWork() а также ExistingWorkPolicy.APPEND если вы хотите присоединиться к цепочке уникальных работ.

Другие вопросы по тегам