C# 我应该锁定订户吗?

C# 我应该锁定订户吗?,c#,zeromq,netmq,C#,Zeromq,Netmq,在NetMQ中作为订阅者是否需要顶部“锁定” 我想是的,我在下面做这件事的地方看起来合适吗 private void Subscribe() { using (var client = new SubscriberSocket()) { client.Options.ReceiveHighWatermark = 1000; client.Connect(Connection);

在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); 
                }
            }
        }
    }

正如您在评论中所述,subscribe是从一个线程调用的:

由于Subscribe只从一个线程调用,因此不需要锁

单个线程只会顺序地锁定和解锁代码块,没有明显的原因


可以安全地将其移除。

这取决于具体情况。是否从多个线程调用私有void Subscribe()方法?仅从一个线程调用Subscribe