我有一个生产者/消费者队列,但是其中有特定类型的对象。因此,不是任何消费者都可以消费添加的对象。我不想为每种类型创建一个特定的队列,因为种类太多。(这有点扩展了生产者/消费者的定义,但我不确定正确的术语是什么。)
是否有一种名为EventWaitHandle的东西,允许带参数的脉冲?例如:
以下是我现在的伪代码版本:
是否有一种名为EventWaitHandle的东西,允许带参数的脉冲?例如:
myHandle.Set(AddedType = "foo")
。现在,我正在使用Monitor.Wait
,然后每个消费者检查脉冲是否确实是针对他们的,但这似乎有点无意义。以下是我现在的伪代码版本:
class MyWorker {
public string MyType {get; set;}
public static Dictionary<string, MyInfo> data;
public static void DoWork(){
while(true){
if(Monitor.Wait(data, timeout)){
if (data.ContainsKey(MyType)){
// OK, do work
}
}
}
}
}
从上面可以看出,当字典中添加其他内容时,我可能会获得脉冲。 我只关心当MyType
被添加到字典中时的情况。 有没有办法做到这一点? 这不是很重要,但是例如,现在我必须手动处理超时,因为每次锁定获取都可能在超时时间内成功,但是MyType
从未在timeout
内添加到字典中。
Monitor.Pulse
适当的对象了? - C.Evenhuis