Я реализую рабочую роль в Azure, которой необходимо удалять большие двоичные объекты из хранилища Azure. Предположим, что мой список больших двоичных объектов содержит около 10 000 элементов.
Вероятно, самым простым синхронным подходом будет:
Parallel.ForEach(list, x => ((CloudBlob) x).Delete());
Требования:
Я хочу реализовать то же самое асинхронно (в одном потоке).
Я хочу ограничить количество одновременных подключений до 50, поэтому я буду выполнять удаление 10 000, когда одновременно выполняется только 50 асинхронных подключений. Если одно удаление завершено, можно начать новое.
Решение?
Пока что, прочитав этот вопрос и этого, кажется, что TPL Dataflow — это то, что нужно.
Это такая простая проблема, и поток данных кажется излишним. Есть ли более простая альтернатива?
Если нет, то как это будет реализовано с использованием потока данных? Насколько я понимаю, мне нужен один блок действий, который выполняет удаление async
(нужно ли мне await
?). При создании моего блока я должен установить MaxDegreeOfParallelism
на 50. Затем мне нужно опубликовать свои 10 КБ BLOB-объектов из списка в блок, а затем выполнить с block.Completion.Wait()
. Это правильно?