Ich benutze viele parallel foreach
Schleifen. Sie werden hauptsächlich zum Ausarbeiten von Daten und nach dem Hinzufügen zu einer Liste verwendet.C# Parallel.ForEach werfen indexOutOfBoundException
dies ist ein Beispiel für meine Methoden:
System.Threading.Tasks.Parallel.ForEach(magazzini, m =>
{
try
{
warehouse.Add(new WAREHOUSE()
{
ID = m.Id,
NAME = m.new_name,
CODE = m.new_codice,
INTEGRATION_KEY = m.dynamics_integrationkey,
RESOURCE_ID = m.new_mobileuser == null ? Guid.Empty : m.new_mobileuser.Id
});
}
catch (Exception ex)
{
Logging.Error(authToken, string.Format("GetAllMagazzini|Magazzini|{0}", ex.InnerException));
}
});
Ich las in this old post, dass es durch die nicht verursacht werden könnte, Thread-sicher-Eigenschaft der List<T>
. Mein Problem ist folgendes:
Ich habe diese nicht nur für solche Schleifen, sondern auch für lange Schleifen mit vielen Operationen. Ich musste die parallel.foreach
verwenden, weil die Verwendung der klassischen foreach
die Abfrage zu Timeout macht, da es auf einem WebService ist.
Wie kann ich die parallel.foreach
vermeiden die indexOutOfBoundException
? Ich muss die List<T>
in etwas anderem ändern?
Vielen Dank! nur eine kleine Frage: Warum, wenn es nur die Add-Operation gibt, wird es sich negativ auf die Performance auswirken? Wie kann man wissen, ob parallel oder nicht parallel foreach? –
Sie können die Größe eines Arrays nicht parallel ändern, Sie können keine Speicheradresse parallel einstellen. Das wäre also ein Nein für Nebenläufigkeit. Wenn Sie den Inhalt einer Datei, einer Webseite, erhalten, können mehrere Aktionen nebeneinander ausgeführt werden, sodass die gleichzeitige Ausführung möglich ist. –