Kann Parallel.ForEach sicher mit CloudTableQuery verwendet werden
-
01-10-2019 - |
Frage
Ich habe eine angemessene Anzahl von Datensätzen in einer Azure Tabelle, dass ich versuchen, auf eine einmal die Datenverschlüsselung zu tun. Ich dachte, dass ich die Dinge beschleunigen könnte Parallel.ForEach
unter Verwendung. Auch, weil es mehr als 1 K Aufzeichnungen und ich mag nicht herum zu verwirren mit Fortsetzungstoken selbst ich bin mit einem CloudTableQuery meinen enumerator zu erhalten.
Mein Problem ist, dass einige meiner Aufzeichnungen doppelt verschlüsselt wurden, und ich erkannte, dass ich bin mir nicht sicher, wie die Threadsicherheit der Enumerator von CloudTableQuery.Execute()
zurückgekehrt ist. Hat sonst noch jemand da draußen mit dieser Kombination keine Erfahrungen?
Lösung 2
Trotz meiner Bemühungen Ich habe nicht in der Lage gewesen, mein ursprüngliches Problem zu replizieren. Meine Schlussfolgerung ist daher, dass es vollkommen in Ordnung ist Parallel.ForEach
Schleifen mit CloudTableQuery.Execute()
zu verwenden.
Andere Tipps
wäre ich bereit, die Antwort zu wetten auf Execute eine Thread-sichere IEnumerator
Implementierung Rückkehr ist höchst unwahrscheinlich. Das heißt, das klingt wie ein weiterer Fall für die Erzeuger-Verbraucher-Muster .
In Ihrem speziellen Szenario würde ich den ursprünglichen Thread hat, die nacheinander und so nannte sie in ein BlockingCollection<T>
. Bevor Sie, dass, obwohl tun beginnen, möchten Sie eine separate Task
starten, die den Verbrauch dieser Elemente mit Parallel::ForEach
kontrollieren. Jetzt werden Sie wollen wahrscheinlich auch in mit der GetConsumingPartitioner
Methode der ParallelExtensions Bibliothek suchen, um am effizientesten zu sein, da die Standard-Partitionierungs mehr schaffen werden Overhead, als Sie in diesem Fall möchten. Sie können mehr über diese von dieses Blog-Post lesen .
Ein zusätzlicher Bonus BlockingCollection<T>
über einen rohen ConcurrentQueueu<T>
der Verwendung ist, dass es die Fähigkeit, set Grenzen , die die Produzenten blockieren helfen können weitere Elemente in der Sammlung aus der Addition als die Verbraucher Schritt halten können. Sie werden natürlich müssen einige Performance zu tun, die Prüfung der Sweet-Spot für Ihre Anwendung zu finden.