2012-04-23 24 views
6

Tôi đã chạy qua số ThreadLocal<T> của .NET4 và đã tự hỏi liệu có cách nào để tích lũy các giá trị .Value từ tất cả các chuỗi không.Làm cách nào để kết hợp các giá trị từ biến ThreadLocal <T>?

Trong thư viện ppl C++ của Microsoft, chúng có Concurrency::combinable::combine_each, có phương pháp tương đương cho .NET ThreadLocal không?

ThreadLocal<long> ticks = new ThreadLocal<long>(); 

void AddTicks(StopWatch sw) 
{ 
    ticks.Value += sw.ElapsedTicks; 
} 

void ReportTimes() 
{ 
    long totalTicks = /* How do I accumulate all the different values? */; 
    Console.WriteLine(TimeSpan.FromTicks(totalTicks)); 
} 

Trả lời

2

Vì .Net 4.5, microsoft đã thêm một thuộc tính được gọi là Values vào lớp ThreadLocal thực hiện chính xác những gì bạn cần. Hãy tìm thấy bên dưới là cách nó hoạt động:

var localResult = new ThreadLocal<int>(() => 0, trackAllValues: true); 
Parallel.For(0, 10000, i => 
{ 
    localResult.Value += Compute(i); 
}); 

int result = localResult.Values.Sum(); 

Đoạn mã trên được thu thập từ các bài viết trên blog http://blogs.msdn.com/b/pfxteam/archive/2011/11/11/10236000.aspx

+2

Bạn có thể chỉnh sửa này để có một ví dụ về cách bạn sẽ sử dụng thuộc tính mới để giải quyết vấn đề? Tôi nghĩ đây là thông tin tốt, nhưng hơi thưa thớt. Thêm chi tiết sẽ thực sự hữu ích cho ai đó đến với SO. –

Các vấn đề liên quan