创造工人“任务”来处理有限的资源

时间:2013-03-18 14:50:43

标签: c# multithreading windows-phone

我正在寻找一种已经在c#中的机制,这将允许我做这样的事情:

  • 需要解码10张图片
  • 只有足够的内存来解码2
  • 开始解码2,将其余部分放入作业队列
  • 取消任务的能力

有关使用c#的任何建议都可以实现这样的目标吗?

2 个答案:

答案 0 :(得分:1)

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();
    });

答案 1 :(得分:0)

使用Seamphore + ConcurrentQueue组合

相关问题