2010-10-21 15 views

Respuesta

7

Al mantener un contador en lugar de buscar en el índice? Por ejemplo:

int counter = 0; 
Parallel.For(4, 500, i => { 
    // TODO: something useful...   
    int progress = Interlocked.Increment(ref counter); 
    Console.WriteLine("{0}: {1}", progress, i); 
}); 

(el uso Interlocked es esencial para evitar que la raza condiciones de acceso a counter)

+0

Y [aquí] (https://gist.github.com/0xorial/8b82594e8f2b96beae77) es el mismo envuelto. – ironic

3
int progress = 0; 
Parallel.For(from, to, i => { 
// do the job 
Interlocked.Increment(ref progress); 
}); 

ahora el avance real es (float)(to - from)/progress

+0

No hay manera de obtener este valor, sin interferir con la sincronización de hilos? – abenci

+0

@devdept no. pero ¿cuál es el problema con este método? – Andrey

+0

Pensé que el Parallel.For() incluía una forma más elegante de obtener este valor. – abenci