Должен ли я заблокировать подписчика? - PullRequest
0 голосов
/ 11 октября 2018

Нужна ли верхняя «блокировка» в качестве подписчика в NetMQ

Думаю, так и будет, пункт, который я делаю ниже, кажется правильным?

   private void Subscribe()
    {
        using (var client = new SubscriberSocket())
        {
            client.Options.ReceiveHighWatermark = 1000;
            client.Connect(Connection);
            client.Subscribe(Key);

            while (true)
            {
                string address = client.ReceiveFrameString();
                lock (SubLock)
                {
                    int newSeqNum = int.Parse(client.ReceiveFrameString());
                    SendDTTxt = client.ReceiveFrameString();
                    string contents = client.ReceiveFrameString();

                    if (SeqNum == -1)
                        SeqNum = newSeqNum - 1;

                    if (newSeqNum != SeqNum + 1)
                    {
                        throw new Exception("[NetMTSub.Subscribe] SeqNum out of sequence");
                    }
                    SeqNum = newSeqNum;

                    UserAction(contents); 
                }
            }
        }
    }

1 Ответ

0 голосов
/ 11 октября 2018

Как указано в вашем комментарии - подписка вызывается из одного потока:

Поскольку подписка вызывается только из одного потока, блокировка не нужна.

Один поток просто последовательно блокирует и разблокирует этот блок кода без видимой причины.

Его можно безопасно удалить.

...