Q:

C# Item is null for very short period of time?

I have a MessageQueue class with a private List property that acts as the queue. There's only one way to add to the queue (through an Add method) and one way to take from the queue (through a Next method). I have a thread running without a delay constantly checking the queue. Occasionally, a null item gets into the queue.
I put a breakpoint in the Add method if the item being added is null, but the breakpoint is never hit.
I put a breakpoint in the Next method if the item being returned is null, which is getting hit.
Furthermore, the breakpoint is set after it fetches the item, but before the queue is adjusted. What's strange is, while the returned item is null, the item that was just fetched is not null! Here is my queue-
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;
        }
    }
}

Here is what's in the queue-

And here is what's in the hand-

Because I am using First on the queue, an error would be thrown if there wasn't an item.
In fact, just to be sure that wasn't somehow related I put a try-catch around the First call- which is never hit.
How is hand null when null is never added to the queue, and the first item in the queue is not null?

A:

List<> is not thread safe 
If you are accessing it from different thread you can see it in a broken state.
Use any synchronization technique or anything from thread-safe collections
As mentioned above: "ConcurrentQueue is most likely what you need to use"

