PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PLINQ su ConcurrentQueue non è multithreading

Stai parallelizzando solo l'enumerazione di assertQueue stesso e poi "non parallelizzandolo" di nuovo in un normale IEnumerable . Tutto questo accade prima del foreach il ciclo inizia anche. Quindi usi il normale IEnumerable con il foreach che esegue il corpo del ciclo in serie.

Esistono molti modi per eseguire il corpo del ciclo in parallelo, ma il primo che viene in mente è usare Parallel.ForEach :

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