How to synchronize the access to a List<T> used in ASP.NET?

10,361

Solution 1

So is this in-memory list shared between requests? That sounds like a potential cause of problems even when you've got locking. Mutable shared collections should generally be avoided, IME.

Note that if you do decide to synchronize, you'll need to do things like locking the list for the whole course of iterating over it and other compound operations. Just locking on each specific access isn't good enough.

Solution 2

Using lock is the correct way to synchronize access to generic collections. access to the collection is spread all over the place, you can create a wrapper class to wrap access to the collection so the interaction surface is reduced. You can then introduce synchronization inside the wrapping object.

Solution 3

Yes, you have to lock- using List.SyncRoot like this:

lock (myList.SyncRoot) 
{
    // Access the collection.
}
Share:
10,361

Related videos on Youtube

Adrian Magdas
Author by

Adrian Magdas

A geek wannabe

Updated on April 17, 2022

Comments

  • Adrian Magdas
    Adrian Magdas about 2 years

    I have some problems on a site with the concurrent access to a list. This list keeps a cart of items, and multiple deletes are crashing the site. Which is the best method to sync them? Is a lock enough? The lock option seems to be ugly because the code is spread all over the place and is pretty messy.

    Update: This is a list implemented like this: public class MyList : List< SomeCustomType> { }

    This is a legacy site so not so many modifications are allowed to it. How should I refactor this in order to safely lock when iterating over it ?

    any idea!