让我尝试解释一下我想要实现的设计模式。我有一个Queue<Item>
或 Item
的其他集合需要通过某种方法处理
static void Process(Item item)
{
// ...
}
它们可以同步或异步处理。
这个队列将定期添加项目,因为我有一些方法,比如
static void AddWorkToQueue()
{
// ...
}
在计时器上运行
timer.Elapsed += AddWorkToQueue();
所以我需要的是某种类型的“连续 while
循环”,只要队列为空,它就会停止。
如何使用 C#.NET 以最佳方式实现此目的?是否有任何内置库可以解决此类问题?
最佳答案
您可以创建自定义队列类并更改其监听器:
public class CustomQueue : Queue<object>
{
public event EventHandler FirstItemInserted;
protected virtual void OnFirstItemInserted()
{
FirstItemInserted?.Invoke(this, EventArgs.Empty);
}
//Modified Enqueue method.
public new void Enqueue(object obj)
{
//Call the listener every time an item is inserted into the empty queue.
if (Count == 0)
{
base.Enqueue(obj);
OnFirstItemInserted();
}
else
base.Enqueue(obj);
}
}
“Enqueue”方法已更改为在每次首次插入后调用监听器。 您所需要做的就是调用一个方法来消耗队列中的每个项目(只要有项目需要出列)。
class MyProgram
{
private static CustomQueue MyQueue;
public MyProgram()
{
MyQueue = new CustomQueue();
MyQueue.FirstItemInserted += ConsumeQueue;
//Activate timer...
}
private static void ConsumeQueue(object sender, EventArgs e)
{
object item;
while (MyQueue.Count > 0)
{
item = MyQueue.Dequeue();
//Do something...
}
}
}
关于c# - 我如何创建一个项目集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42838729/