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 Maciej Los 315
1 OriginalGriff 233
2 Aajmot Sk 224
3 Richard MacCutchan 220
4 Marcin Kozub 210
0 OriginalGriff 7,853
1 Sergey Alexandrovich Kryukov 7,107
2 DamithSL 5,604
3 Manas Bhardwaj 4,986
4 Maciej Los 4,790


Advertise | Privacy | Mobile
Web03 | 2.8.1411023.1 | Last Updated 27 Jul 2012
Copyright © CodeProject, 1999-2014
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