C # производитель / потребитель / наблюдатель?

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

6
задан Xodarap 16 December 2010 в 17:22
поделиться