Can Parallel.Foreach можно безопасно использовать с CloudTableQuery
-
01-10-2019 - |
Вопрос
У меня есть разумное количество записей в таблице Azure, которую я пытаюсь сделать одно время шифрование данных. Я думал, что я могу ускорить вещи, используя Parallel.ForEach
. Отказ Также потому, что есть более 1 тысяч записей, и я не хочу беспокоиться с продолжением токенов, я использую CloudTableQuery, чтобы получить мой перечислетель.
Моя проблема заключается в том, что некоторые из моих записей были двойными зашифрованы, и я понял, что я не уверен, как поток безопасен, перечислетель возвращается CloudTableQuery.Execute()
является. У кого-нибудь еще есть какой-то опыт с этой комбинацией?
Решение 2
Несмотря на мои лучшие усилия, я не смогли реплицировать мою первоначальную проблему. Поэтому мой вывод, что это совершенно нормально для использования Parallel.ForEach
петли с CloudTableQuery.Execute()
.
Другие советы
Я был бы готов побить ответ на выполнение возврата потока IEnumerator
Реализация крайне вряд ли. Что сказал, это звучит как еще один случай для Производитель-потребительский узор.
В вашем конкретном сценарии у меня будет оригинальная тема, которая называется выполнение, прочитайте результаты. BlockingCollection<T>
. Отказ Прежде чем начать это, хотя, вы хотите начать отдельный Task
это будет контролировать потребление этих предметов, использующих Parallel::ForEach
. Отказ Теперь вы, вероятно, также захотите посмотреть на использование GetConsumingPartitioner
Метод библиотеки параллельной технике, чтобы быть наиболее эффективным, поскольку парикмахера по умолчанию создаст больше накладных расходов, чем вы хотите в этом случае. Вы можете прочитать больше об этом из этот блог пост.
Дополнительный бонус использования BlockingCollection<T>
над сырой ConcurrentQueueu<T>
это то, что он предлагает способность установить границы Что может помочь заблокировать производителя от добавления большего количества предметов в коллекцию, чем потребители могут идти в ногу с. Вы, конечно, должны выполнить тестирование производительности, чтобы найти сладкое место для вашего приложения.