2010-10-21 5 views

risposta

7

Mantenendo un contatore piuttosto che guardare l'indice? Per esempio:

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

(l'utilizzo Interlocked è essenziale per evitare di essere da corsa condizioni su come accedere counter)

+0

E [qui] (https://gist.github.com/0xorial/8b82594e8f2b96beae77) è lo stesso wrapping. – ironic

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

ora progresso reale è (float)(to - from)/progress

+0

Non c'è modo di ottenere questo valore, senza interferire con la sincronizzazione dei thread? – abenci

+0

@devdept no. ma qual è il problema con questo metodo? – Andrey

+0

Ho pensato che il Parallel.For() includesse un modo più elegante per ottenere questo valore. – abenci