Ho un IEnumerable che voglio passare a Parallel.ForEach, ma l'IEnumerable è implementato usando un metodo C# e produce, e potenzialmente il codice nell'enumeratore è non thread sicuro. Stava pensando di usare Parallel.ForEach su questo. Sono sotto il presupposto che l'iterazione interna effettiva dell'IEnumerable di ForEach sia sempre sullo stesso thread, quindi ForEach passa ciascun elemento a un altro thread potenziale per l'elaborazione. È corretto?C# Parallel.ForEach utilizza lo stesso thread per le iterazioni della raccolta
Ho letto dove IEnumerable iteration utilizza l'archiviazione locale del thread e thread diversi che accedono allo stesso IEnumerable avranno ciascuno la propria iterazione corrente, successiva, ecc. Questo è il motivo per cui presumo che ForEach eseguirà effettivamente tutta l'iterazione sullo stesso filo.
Almeno so che l'iterazione non si trova sullo stesso thread chiamato Parallel.ForEach. Un pò sperando che fosse da quando ho bisogno di fare un'inizializzazione del thread per il thread che sta facendo l'iterazione. Quindi potrebbe esserci un problema qui per iniettare la mia inizializzazione sul thread facendo l'iterazione.
presumo che non vogliate utilizzare il multithreading su qualcosa che non sia thread-safe. – DLeh
Voglio che l'enumerazione sia thread-safe su un singolo thread, ma l'elaborazione effettiva dei singoli elementi può essere su più thread. – Ron
Quindi, sembra dai commenti che sta iterando gli elementi nella stessa discussione. Ora, vorrei solo che lo facesse sul thread principale, o, credo, un modo per collegarlo. Cercherò di avvolgere un altro metodo con i rendimenti e vedere se riesco a inizializzare il thread prima di cedere ogni elemento – Ron