using System.Threading.Tasks;
public static void Main()
var sc = new SharedCounter(42);
var tasks = Enumerable.Range(1, 100).Select(_ =>
for (int i = 0; i < 10000; i++)
internal struct SharedCounter
private readonly ThreadLocal<int> _counter;
public SharedCounter(int initialValue)
_counter = new ThreadLocal<int>(true);
_counter.Value = initialValue;
public void Increment() => _counter.Value++;
get => _counter.Values.Select(x => (long)x).Sum();