PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PLINQ sur ConcurrentQueue n'est pas multithreading

Vous ne parallélisez que l'énumération de assertQueue lui-même, puis en le "déparallélisant" dans un IEnumerable ordinaire . Tout cela se passe avant le foreach boucle commence même. Ensuite, vous utilisez le IEnumerable ordinaire avec le foreach qui exécute le corps de la boucle en série.

Il existe de nombreuses façons d'exécuter le corps de la boucle en parallèle, mais la première qui me vient à l'esprit est d'utiliser Parallel.ForEach :

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