Tôi đang cố triển khai mẫu Parallel.ForEach
và theo dõi tiến trình, nhưng tôi thiếu một số thứ liên quan đến khóa. Ví dụ sau tính đến 1000 khi số threadCount = 1
, nhưng không phải khi threadCount
> 1. Cách chính xác để thực hiện việc này là gì?Cách thực hiện đúng Parallel.ForEach, khóa và báo cáo tiến độ
class Program
{
static void Main()
{
var progress = new Progress();
var ids = Enumerable.Range(1, 10000);
var threadCount = 2;
Parallel.ForEach(ids, new ParallelOptions { MaxDegreeOfParallelism = threadCount }, id => { progress.CurrentCount++; });
Console.WriteLine("Threads: {0}, Count: {1}", threadCount, progress.CurrentCount);
Console.ReadKey();
}
}
internal class Progress
{
private Object _lock = new Object();
private int _currentCount;
public int CurrentCount
{
get
{
lock (_lock)
{
return _currentCount;
}
}
set
{
lock (_lock)
{
_currentCount = value;
}
}
}
}
Cảm ơn, chính xác những gì đang xảy ra. Tôi đã thêm một phương thức bổ sung vào Progress để tăng bộ đếm với khóa được áp dụng. –
Tôi nghĩ rằng progressLock biến nên là "tiến bộ"? – eschneider