PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PLINQ auf ConcurrentQueue ist kein Multithreading

Sie parallelisieren nur die Aufzählung der assertQueue sich selbst und es dann wieder in ein gewöhnliches IEnumerable "entparallelisieren". . Dies geschieht alles vor dem foreach Schleife beginnt sogar. Dann verwenden Sie das gewöhnliche IEnumerable mit dem foreach die den Rumpf der Schleife seriell ausführt.

Es gibt viele Möglichkeiten, den Schleifenkörper parallel auszuführen, aber die erste, die mir in den Sinn kommt, ist die Verwendung von Parallel.ForEach :

Parallel.ForEach(arrestQueue, arrest =>
    {
        Geocoder geocodeThis = new Geocoder(arrest);
        writeQueue.Enqueue(geocodeThis.Geocode());
        Console.Out.WriteLine("Enqueued " + ++k);
    });