Tôi có một số ConcurrentQueue chứa Action (System.Action). Mỗi hành động trong hàng đợi này cần phải chạy (cần được gọi bằng cách sử dụng lời gọi).Làm cách nào để hạn chế số lượng Tác vụ đang hoạt động chạy qua Thư viện tác vụ song song?
Khi hàng đợi không trống => hành động cần được gọi => Nhưng tôi muốn giới hạn số lượng tác vụ song song sẽ chạy. Bên cạnh điều này, một hành động mới có thể được thêm vào hàng đợi bất kỳ lúc nào.
Cách thực hiện?
(sử dụng .net 4.0)
tôi đã viết một cái gì đó nhưng tôi không chắc chắn đây là cách tiếp cận tốt nhất
SemaphoreSlim maxThread = new SemaphoreSlim(5);
while(!actionQueue.IsEmpty)
{
maxThread.Wait();
Task.Factory.StartNew(() =>
{
Action action;
if(actionExecution.TryDequeue(out action))
{
action.Invoke();
}
},
TaskCreationOptions.LongRunning).ContinueWith((task) => maxThread.Release());
}
}
Bạn có thể giải thích vấn đề thực sự không? Tại sao bạn cảm thấy cần phải hạn chế số lượng công việc? –
chỉ là kinh nghiệm học tập .. tôi muốn học. nhưng tôi cũng muốn biết tại sao tôi không cần phải thực hiện giới hạn này? – Yanshof
Không cần giới hạn số lượng tác vụ - Tôi thấy bây giờ bạn đang nói về * đồng thời thực hiện các tác vụ * chứ không phải tổng số trong hàng đợi; Câu trả lời của lazyberezovsky dưới đây là câu trả lời đúng cho kịch bản này. –