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: 199
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