2014-10-16 13 views
6

Tôi có một BatchBlock với BoundedCapacity xác định trên nóSự khác nhau giữa một tham lam và một khối dataflow không tham lam với boundedcapacity định nghĩa

var _batchBlock = new BatchBlock<int>(2, new GroupingDataflowBlockOptions 
             {BoundedCapacity = 100 }); 

Vì vậy, nếu công suất hàng đợi đạt 100 khối trì hoãn tất cả các tin nhắn đã nhận cho đến khi một vị trí có sẵn. Trong trường hợp này là hàng đợi hàng loạt được coi là tham lam hoặc không tham lam?

Trả lời

5

Khối là tham lam, nhưng không phải vì thế nào nó xử lý các nội dung trên 100, nhưng những người bên dưới 2. Bạn có thể thiết lập giá trị tham lam để false (true là mặc định) và sau đó là khối sẽ chỉ thực sự tiêu thụ các mặt hàng khi có đủ để gửi một lô, đến lúc đó họ đang bị hoãn lại:

lớp
var batchBlock = new BatchBlock<int>(2, new GroupingDataflowBlockOptions 
{ 
    Greedy = false, 
    BoundedCapacity = 100. 
}); 

Các BatchBlock hoạt động trong cả hai chế độ tham lam hoặc không tham lam. Trong chế độ tham lam, là mặc định, một đối tượng BatchBlock chấp nhận mọi thông điệp mà nó được cung cấp và truyền đi một mảng sau khi nó nhận được số lượng các phần tử được chỉ định. Trong chế độ không tham lam, một đối tượng BatchBlock trì hoãn tất cả các tin nhắn gửi đến cho đến khi đủ nguồn đã cung cấp thông điệp đến các khối để tạo thành một lô

Từ Dataflow (Task Parallel Library)

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