Wie schreibe ich eine Thread-bewusste Erweiterungsfunktion für PLINQ?

8

Weiß jemand, wie man eine Erweiterungsfunktion schreibt, die eine ParallelQuery in PLINQ zurückgibt?

Genauer gesagt habe ich folgendes Problem: Ich möchte eine Umwandlung innerhalb einer PLINQ-Abfrage durchführen, die eine Engine benötigt, deren Erstellung kostspielig ist und auf die nicht gleichzeitig zugegriffen werden kann.

Ich könnte Folgendes tun:

%Vor%

Hier wird die Engine einmal pro Artikel erstellt, was zu teuer ist.

Ich möchte, dass die Engine einmal pro Thread erstellt wird.

Mit Aggregate kann ich mit etwas wie

etwas erreichen, was ich möchte %Vor%

Wie Sie sehen können, missbrauche ich den Akkumulator, um einen Motor pro Gewinde zu tragen. Das Problem hierbei ist, dass PLINQ am Ende die Ergebnisse in einem einzigen IEnumerable aggregiert, wodurch die Threads synchronisiert werden. Das ist nicht sehr schön, wenn ich später noch eine PLINQ-Erweiterung anhängen möchte.

Ich würde etwas wie

schätzen %Vor%

Hat jemand eine Idee, wie man das erreicht?

    
JohnB 22.06.2012, 13:11
quelle

1 Antwort

5

Sie können dazu ThreadLocal<T> verwenden. Etwas wie:

%Vor%     
svick 22.06.2012, 13:33
quelle

Tags und Links