У меня есть ряд файлов, которые мне нужно загрузить. Когда каждый файл загружен, над ним будет выполняться операция. Когда все файлы загружены, я хочу выполнить задачу для всех типов файлов. Технически процесс может выполняться после загрузки любого файла, но если я загружу сотню файлов, я не хочу, чтобы он запускался 100 раз.
Я использую функции Azure, поэтому это должно быть каким-то образом срабатывать, либо с помощью BLOB-объектов, таблиц, очереди или триггеров таймера (или какого-либо другого триггера).
Вот мои мысли о том, как бы я этого добился:
- Отправить новый файл в хранилище BLOB-объектов
- Blob trigger is activated
- File processed
- Отправить тип файла в хранилище таблиц
- Очистить очередь
- Поставить флаг в очередь с задержкой видимости в 1 минуту
- Queue triggered, with
IQueryable<TableEntity>
as additional input- Get all table entries
- Выполнить задачу для каждого типа файла (запись в таблице)
- Удалить обработанные записи из таблицы
Мне не очень нравится необходимость постоянно сбрасывать очередь, но если X-файлы загружаются в последнюю минуту обработки, то следующая задача будет выполняться X раз, что является потраченными впустую ресурсами, особенно если X высокий. Так что на самом деле в этом случае в очереди должен быть не более одного элемента.
Я все время думаю, что триггер blob с задержкой видимости может иметь больше смысла, но, насколько я знаю, этого не существует.
Так это правильный способ решить эту проблему с помощью того, что есть в наличии? Есть ли способ лучше?