0

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

  • 队列包含一些初始项目
  • 出队直到队列耗尽并调用异步函数
  • async 函数可以将新项目排入队列
  • 需要继续运行直到所有任务完成并且队列被耗尽

这是我写的一些伪代码:

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

我正在为如何在这里编写我的 Main 函数而苦苦挣扎。队列会耗尽,但会添加新项目,所以这并没有真正起作用。

4

2 回答 2

0

Try locking the queue when working with it.

于 2013-09-15T14:01:16.783 回答
0

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

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

于 2013-09-15T15:34:08.797 回答