当前位置 : 主页 > 编程语言 > c语言 >

C#项目在很短的时间内为空?

来源:互联网 收集:自由互联 发布时间:2021-06-25
我有一个MessageQueue类,其中包含一个充当队列的私有List属性.只有一种方法可以添加到队列中(通过Add方法)和一种从队列中获取的方法(通过Next方法).我有一个线程运行没有延迟不断检查队
我有一个MessageQueue类,其中包含一个充当队列的私有List属性.只有一种方法可以添加到队列中(通过Add方法)和一种从队列中获取的方法(通过Next方法).我有一个线程运行没有延迟不断检查队列.偶尔,null项进入队列.

如果要添加的项为null,我在Add方法中放置一个断点,但是从不命中断点.

如果返回的项目为null,那么我会在Next方法中放置一个断点.

此外,断点在获取项目之后但在调整队列之前设置.奇怪的是,当返回的项为null时,刚刚获取的项不为null!这是我的队列 –

public class MessageQueue
{
    private List<byte[]> queue = new List<byte[]>();

    public void Add(byte[] payload)
    {
        if (payload == null)
        {
            Console.WriteLine("thats why");
        }

        queue.Add(payload);
    }

    public byte[] Next()
    {
        byte[] hand = queue.First();

        if(hand == null)
        {
            Console.WriteLine("asdf");
        }

        queue = queue.Skip(1).ToList();

        return hand;
    }

    public bool HasMessages
    {
        get
        {
            return queue.Count() > 0;
        }
    }
}

这是队列中的内容 –

以下是手中的内容 –

因为我在队列中使用First,所以如果没有项目则会抛出错误.

事实上,为了确保与某种方式无关,我在第一次调用中放置了一个try-catch,它永远不会被击中.

如果从未将null添加到队列中,并且队列中的第一项不为空,那么hand null如何?

列表与LT;> is not thread safe

如果您从不同的线程访问它,您可以看到它处于损坏的状态.
使用synchronization technique或thread-safe collections中的任何内容

如上所述:“ConcurrentQueue很可能是您需要使用的”

网友评论