У меня есть очередь производителя / потребителя, за исключением того, что существуют определенные типы объектов. Таким образом, не любой потребитель может потреблять добавленный объект. Я не хочу создавать отдельную очередь для каждого типа, так как их слишком много. (Это как бы расширяет определение производителя / потребителя, но я m не уверен, какой термин правильный.)
Существует ли такая вещь, как 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
}
}
}
}
}
Как видите, я могу получать импульсы, когда к dict добавляется что-то другое. Меня волнует только то, когда MyType добавляется к dict. Есть способ сделать это? Это не такая уж большая проблема, но, например, сейчас мне нужно вручную обрабатывать тайм-ауты, потому что каждое получение блокировки может быть успешным в течение тайм-аута, но MyType
никогда не добавляется к dict в течение таймаута
.