<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="10.0.0-preview.1.25080.5" />

SynchronizedList<T>

sealed class SynchronizedList<T>
namespace System.Diagnostics { internal sealed class SynchronizedList<T> { private readonly object _writeLock; private T[] _volatileArray; public int Count => _volatileArray.Length; public SynchronizedList() { _volatileArray = Array.Empty<T>(); _writeLock = new object(); } public void Add(T item) { lock (_writeLock) { T[] array = new T[_volatileArray.Length + 1]; Array.Copy(_volatileArray, array, _volatileArray.Length); array[_volatileArray.Length] = item; _volatileArray = array; } } public bool AddIfNotExist(T item) { lock (_writeLock) { if (Array.IndexOf<T>(_volatileArray, item) < 0) { T[] array = new T[_volatileArray.Length + 1]; Array.Copy(_volatileArray, array, _volatileArray.Length); array[_volatileArray.Length] = item; _volatileArray = array; return true; } return false; } } public bool Remove(T item) { lock (_writeLock) { int num = Array.IndexOf<T>(_volatileArray, item); if (num >= 0) { T[] array = new T[_volatileArray.Length - 1]; Array.Copy(_volatileArray, array, num); Array.Copy(_volatileArray, num + 1, array, num, _volatileArray.Length - num - 1); _volatileArray = array; return true; } return false; } } public void EnumWithFunc<TParent>(ActivitySource.Function<T, TParent> func, ref ActivityCreationOptions<TParent> data, ref ActivitySamplingResult samplingResult, ref ActivityCreationOptions<ActivityContext> dataWithContext) { T[] volatileArray = this._volatileArray; foreach (T item in volatileArray) { func(item, ref data, ref samplingResult, ref dataWithContext); } } public void EnumWithAction(Action<T, object> action, object arg) { T[] volatileArray = _volatileArray; foreach (T arg2 in volatileArray) { action(arg2, arg); } } public void EnumWithExceptionNotification(Activity activity, Exception exception, ref TagList tags) { if (!(typeof(T) != typeof(ActivityListener))) { T[] volatileArray = _volatileArray; for (int i = 0; i < volatileArray.Length; i++) { (volatileArray[i] as ActivityListener).ExceptionRecorder?.Invoke(activity, exception, ref tags); } } } } }