我需要实现一个生产者/消费者有界队列,多个消费者针对一个生产者。
我有一个推送功能,可以将一个项目添加到队列中,然后检查 maxsize。如果我们达到它返回false,在其他情况下返回true。
在以下代码中,_vector 是一个 List<T>,onSignal 基本上以异步方式消费一个项目。
您看到此代码有问题吗?
public bool Push(T message)
{
bool canEnqueue = true;
lock (_vector)
{
_vector.Add(message);
if (_vector.Count >= _maxSize)
{
canEnqueue = false;
}
}
var onSignal = SignalEvent;
if (onSignal != null)
{
onSignal();
}
return canEnqueue;
}