List 不属于线程安全数据集合,多线程会有不可控的情况,发生
using System;
using System.Collections;
using System.Collections.Generic;
// Token: 0x02000BAA RID: 2986
[Serializable]
internal class SynchronizedList : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable
{
// Token: 0x06006DDB RID: 28123 RVA: 0x0017A630 File Offset: 0x00178830
internal SynchronizedList(List<T> list)
{
this._list = list;
this._root = ((ICollection)list).SyncRoot;
}
// Token: 0x170012F5 RID: 4853
// (get) Token: 0x06006DDC RID: 28124 RVA: 0x0017A64C File Offset: 0x0017884C
public int Count
{
get
{
object root = this._root;
int count;
lock (root)
{
count = this._list.Count;
}
return count;
}
}
// Token: 0x170012F6 RID: 4854
// (get) Token: 0x06006DDD RID: 28125 RVA: 0x0017A694 File Offset: 0x00178894
public bool IsReadOnly
{
get
{
return ((ICollection<T>)this._list).IsReadOnly;
}
}
// Token: 0x06006DDE RID: 28126 RVA: 0x0017A6A4 File Offset: 0x001788A4
public void Add(T item)
{
object root = this._root;
lock (root)
{
this._list.Add(item);
}
}
// Token: 0x06006DDF RID: 28127 RVA: 0x0017A6EC File Offset: 0x001788EC
public void Clear()
{
object root = this._root;
lock (root)
{
this._list.Clear();
}
}
// Token: 0x06006DE0 RID: 28128 RVA: 0x0017A734 File Offset: 0x00178934
public bool Contains(T item)
{
object root = this._root;
bool result;
lock (root)
{
result = this._list.Contains(item);
}
return result;
}
// Token: 0x06006DE1 RID: 28129 RVA: 0x0017A77C File Offset: 0x0017897C
public void CopyTo(T[] array, int arrayIndex)
{
object root = this._root;
lock (root)
{
this._list.CopyTo(array, arrayIndex);
}
}
// Token: 0x06006DE2 RID: 28130 RVA: 0x0017A7C4 File Offset: 0x001789C4
public bool Remove(T item)
{
object root = this._root;
bool result;
lock (root)
{
result = this._list.Remove(item);
}
return result;
}
// Token: 0x06006DE3 RID: 28131 RVA: 0x0017A80C File Offset: 0x00178A0C
IEnumerator IEnumerable.GetEnumerator()
{
object root = this._root;
IEnumerator result;
lock (root)
{
result = this._list.GetEnumerator();
}
return result;
}
// Token: 0x06006DE4 RID: 28132 RVA: 0x0017A858 File Offset: 0x00178A58
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
object root = this._root;
IEnumerator<T> enumerator;
lock (root)
{
enumerator = ((IEnumerable<T>)this._list).GetEnumerator();
}
return enumerator;
}
// Token: 0x170012F7 RID: 4855
public T this[int index]
{
get
{
object root = this._root;
T result;
lock (root)
{
result = this._list[index];
}
return result;
}
set
{
object root = this._root;
lock (root)
{
this._list[index] = value;
}
}
}
// Token: 0x06006DE7 RID: 28135 RVA: 0x0017A930 File Offset: 0x00178B30
public int IndexOf(T item)
{
object root = this._root;
int result;
lock (root)
{
result = this._list.IndexOf(item);
}
return result;
}
// Token: 0x06006DE8 RID: 28136 RVA: 0x0017A978 File Offset: 0x00178B78
public void Insert(int index, T item)
{
object root = this._root;
lock (root)
{
this._list.Insert(index, item);
}
}
// Token: 0x06006DE9 RID: 28137 RVA: 0x0017A9C0 File Offset: 0x00178BC0
public void RemoveAt(int index)
{
object root = this._root;
lock (root)
{
this._list.RemoveAt(index);
}
}
// Token: 0x040034F9 RID: 13561
private List<T> _list;
// Token: 0x040034FA RID: 13562
private object _root;
}
相同的原理其他的数据集合都有安全版本