Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: LINQ Parallel
Hi All,
 
I'm tried Parallel Linq for adding data to an object. but some of the values are missing when clicking the button multiple times. The code is
 
BindingList<object> addnew = new BindingList<object>();
System.Threading.Tasks.Parallel.For(0, 1000, i =>
                addnew.Add(
                new object()
                )
                );
MessageBox.Show(addnew.Count.ToString());
 
please give a solution if any one know about this.
Posted 27-Jul-12 0:14am
Edited 27-Jul-12 1:08am
v4

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

If you look at the MSDN page for BindingList[^] you will see the following at teh bottom:
"Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe."
 
This means that the threads are interfering with each other! You need to use a lock of some form:
BindingList<object> addnew = new BindingList<object>();
    System.Threading.Tasks.Parallel.For(0, 1000, i => AddOne(addnew));
    MessageBox.Show(addnew.Count.ToString());
    }
private void AddOne(BindingList<object> list)
    {
    lock (list)
        {
        list.Add(new object());
        }
    }
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 260
1 ProgramFOX 165
2 Peter Leow 130
3 Zoltán Zörgő 130
4 Maciej Los 80
0 OriginalGriff 260
1 ProgramFOX 145
2 Peter Leow 130
3 Sergey Alexandrovich Kryukov 85
4 Fredrik Bornander 75


Advertise | Privacy | Mobile
Web01 | 2.8.150301.1 | Last Updated 27 Jul 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100