加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:26:16 所属栏目:百科 来源:网络整理
导读:我有一个MessageQueue类,其中包含一个充当队列的私有List属性.只有一种方法可以添加到队列中(通过Add方法)和一种从队列中获取的方法(通过Next方法).我有一个线程运行没有延迟不断检查队列.偶尔,null项进入队列. 如果要添加的项为null,我在Add方法中放置一个
我有一个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;
        }
    }
}

这是队列中的内容 –

enter image description here

以下是手中的内容 –

enter image description here

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

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

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

解决方法

列表与LT;> is not thread safe

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读