我正在寻找一种已经在 c# 中的机制,它可以让我做这样的事情:
- 10张图片需要解码
- 只有足够的内存来解码 2
- 开始解码 2,将其余部分放入作业队列
- 取消任务的能力
关于使用 c# 完成这样的事情的任何建议?
我正在寻找一种已经在 c# 中的机制,它可以让我做这样的事情:
关于使用 c# 完成这样的事情的任何建议?
该类BlockingCollection<T>
使生产者/消费者队列非常易于使用。
var queue = new BlockingCollection<Action>();
//put work to do in the queue
for (int i = 0; i < 10; i++)
queue.Add(() => ProcessImage());
queue.CompleteAdding();
//create two workers
for (int i = 0; i < 2; i++)
{
Task.Factory.StartNew(() =>
{
foreach (var action in queue.GetConsumingEnumerable())
action();
});
}
//to cancel the work, empty the queue
Task.Delay(5000)
.ContinueWith(t =>
{
queue.GetConsumingEnumerable().Count();
});
使用 Seamphore + ConcurrentQueue 组合