动态队列和异步/等待
本文关键字:等待 异步 队列 动态 | 更新日期: 2023-09-27 18:31:19
试图让我思考如何在 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());
}
}
我正在为如何在这里编写我的 Main 函数而苦苦挣扎。队列将耗尽,但会添加新项目,因此这实际上不起作用。
尝试在使用它时锁定队列。
.
NET 中的Queue<T>
类型不是线程安全的,也不是生成者/使用者队列的最佳选择。
我建议您考虑BlockingCollection<T>
或BufferBlock<T>
.