List with non-null elements ends up containing null. A synchronization issue?

Posted by Alix on Stack Overflow See other posts from Stack Overflow or by Alix
Published on 2010-04-26T13:20:13Z Indexed on 2010/04/26 13:23 UTC
Read the original article Hit count: 165

Filed under:
|
|
|
|

Hi. First of all, sorry about the title -- I couldn't figure out one that was short and clear enough.

Here's the issue: I have a list List<MyClass> list to which I always add newly-created instances of MyClass, like this: list.Add(new MyClass()). I don't add elements any other way.

However, then I iterate over the list with foreach and find that there are some null entries. That is, the following code:

foreach (MyClass entry in list)
    if (entry == null)
         throw new Exception("null entry!");

will sometimes throw an exception. I should point out that the list.Add(new MyClass()) are performed from different threads running concurrently. The only thing I can think of to account for the null entries is the concurrent accesses. List<> isn't thread-safe, after all. Though I still find it strange that it ends up containing null entries, instead of just not offering any guarantees on ordering.

Can you think of any other reason?

Also, I don't care in which order the items are added, and I don't want the calling threads to block waiting to add their items. If synchronization is truly the issue, can you recommend a simple way to call the Add method asynchronously, i.e., create a delegate that takes care of that while my thread keeps running its code? I know I can create a delegate for Add and call BeginInvoke on it. Does that seem appropriate?

Thanks.

© Stack Overflow or respective owner

Related posts about c#

Related posts about list