2010-10-21 8 views

Trả lời

7

Bằng cách giữ một bộ đếm chứ không phải nhìn vào các chỉ số? Ví dụ:

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

(việc sử dụng Interlocked là điều cần thiết để tránh bị đua điều kiện tiếp cận counter)

+0

Và [tại đây] (https://gist.github.com/0xorial/8b82594e8f2b96beae77) được gói cùng một loại. – ironic

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

nay tiến độ thực tế là (float)(to - from)/progress

+0

Không có cách nào để có được giá trị này mà không can thiệp với đồng bộ hóa thread? – abenci

+0

@devdept no. nhưng vấn đề sử dụng phương pháp này là gì? – Andrey

+0

Tôi nghĩ rằng Parallel.For() bao gồm một cách thanh lịch hơn để có được giá trị này. – abenci