# ConcurrentList<T> class

Namespace: [Grasshopper2.Collections](https://developer.rhino3d.com/api/gh2/namespace/grasshopper2.collections.md) · Assembly: [Grasshopper2](https://developer.rhino3d.com/api/gh2/assembly/grasshopper2.md)

```cs
public class ConcurrentList<T> : IEnumerable<T>
```

Provides very basic concurrent storage. This class is not high-performance.

**Type parameters:**

- `T`

## Properties

- [Count](https://developer.rhino3d.com/api/gh2/type/grasshopper2.collections.concurrentlist-1/count.md): Gets the number of items currently stored.

## Methods

- [Add](https://developer.rhino3d.com/api/gh2/type/grasshopper2.collections.concurrentlist-1/add.md): Add an item to this collection.
- [Apply<TOut>](https://developer.rhino3d.com/api/gh2/type/grasshopper2.collections.concurrentlist-1/apply.md): (2 overloads) Apply a delegate to the internal list. I hope you know how to write threadsafe code before you use this method.
- [Contains](https://developer.rhino3d.com/api/gh2/type/grasshopper2.collections.concurrentlist-1/contains.md): Gets whether this list contains the given item.
- [GetEnumerator](https://developer.rhino3d.com/api/gh2/type/grasshopper2.collections.concurrentlist-1/getenumerator.md): Enumerate over all items in the concurrent list. This enumerator operates on a copy of the internal data and thus will not reflect changes made to the collection, but also won't throw a synchronisation exception. The enumerator itself does not run from a locked section.
- [Remove](https://developer.rhino3d.com/api/gh2/type/grasshopper2.collections.concurrentlist-1/remove.md): Remove an item from this collection.
- [IEnumerable.GetEnumerator](https://developer.rhino3d.com/api/gh2/type/grasshopper2.collections.concurrentlist-1/system-collections-ienumerable-getenumerator.md)
