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

mic*_*cah 3 c#

我有一个MessageQueue带有私有List属性的类,它充当队列.只有一种方法可以添加到队列中(通过Add方法)和一种从队列中获取的Next方法(通过方法).我有一个线程运行没有延迟不断检查队列.偶尔,一个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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是队列中的内容 -

在此输入图像描述

以下是手中的内容 -

在此输入图像描述

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

事实上,为了确保与某种方式没有关联,我在First呼叫周围设置了一个尝试 - 它从未被击中过.

如何为hand空当空从不添加到队列,并在队列中的第一个项目是不是null?

Eug*_*voy 6

List <> 不是线程安全的

如果您从不同的线程访问它,您可以看到它处于损坏的状态.使用任何同步技术线程安全集合中的任何内容

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