Click here to Skip to main content
11,496,146 members (1,366 online)
The site is currently in read-only mode for maintenance. Posting of new items will be available again shortly.
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

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 Dnyaneshwar@Pune 692
1 RyanDev 230
2 CHill60 208
3 Sascha Lefèvre 195
4 Sergey Alexandrovich Kryukov 124
0 Sergey Alexandrovich Kryukov 10,401
1 OriginalGriff 8,910
2 Sascha Lefèvre 3,899
3 Maciej Los 3,422
4 Richard Deeming 2,600


Advertise | Privacy | Mobile
Web04 | 2.8.150520.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