Как использовать PortMode.OptimizedSingleReissueReceiver в чередовании? (Microsoft CCR) - PullRequest
3 голосов
/ 18 ноября 2009

Я прочитал пост на форуме Microsoft CCR о сокращении накладных расходов на вызовы Port.Post () [ref .: PortElement Instantiation в CCR ], и мне было интересно, есть ли подобное способ связать порт с его получателем, чтобы использовать порт в режиме OptimizedSingleReissueReceiver в арбитре чередования?

Я реализовал следующий код, использующий этот PortMode для чередования:

    // Creates the Receiver 
    Receiver receiver = Arbiter.Receive(true, inputPort, inputPortHandler);
    // Change the port mode before binding the Receiver with the DispatcherQueue
      inputPort.Mode = PortMode.OptimizedSingleReissueReceiver;         

    // Creates the Interleave
    ExclusiveReceiverGroup exclusiveReceiverGroup = new ExclusiveReceiverGroup(receiver);
    Interleave interleave = Arbiter.Interleave(new TeardownReceiverGroup(), 
                                                            exclusiveReceiverGroup, 
                                                            new ConcurrentReceiverGroup());         
    // Activate the Interleave 
    Arbiter.Activate(dispatcherQueue, interleave);

Сначала это выглядело нормально, однако время от времени я по-прежнему получал исключение NullReferenceException (это исключение указывает, что порт еще не связан с получателем).

Кто-нибудь знает другой способ использования PortMode.OptimizedSingleReissueReceiver внутри Interleave?

...