动态队列和异步/等待

时间:2013-09-15 13:30:04

标签: c# .net

尝试围绕如何在使用队列的C#中正确编写一些代码。

  • 队列包含一些初始项目
  • 出队直到排队并调用异步功能
  • 异步功能可以将新项目排入队列
  • 需要继续运行,直到完成所有任务并排空队列

这是我写的一些伪代码:

Queue<string> queue = new Queue<string>();
static async Task SomeTask(item) {
    var newTask = await GenerateNewTask();
    if (newTask != null)
        queue.Enqueue(newTask);
}

static void Main() {
    while (queue.Count > 0) {
        SomeTask (queue.Dequeue());
    }
}

我正在努力学习如何在这里编写我的主要功能。队列将耗尽,但新项目将被添加,因此实际上并不起作用。

2 个答案:

答案 0 :(得分:0)

尝试使用时锁定队列。

答案 1 :(得分:0)

.NET中的Queue<T>类型不是线程安全的,并且不是生产者/消费者队列的最佳选择。

我建议您考虑BlockingCollection<T>BufferBlock<T>