Я знаю, что C# System.Collections.Generi c .List не является потокобезопасным. Но мне интересно, почему этот фрагмент кода генерирует нулевые значения.
Task.Run(() =>
{
for (var i = 0; i < 10; i++)
{
var str = $"Test {i}";
list.Add(str);
if (i == 9)
{
i = 0;
}
}
});
Task.Run(() =>
{
while (true)
{
list.Remove("Test 1");
list.Remove("Test 2");
list.Remove("Test 3");
list.Remove("Test 4");
list.Remove("Test 5");
list.Remove("Test 6");
list.Remove("Test 7");
list.Remove("Test 8");
list.Remove("Test 9");
}
});
Это часть списка через несколько секунд:
![enter image description here](https://i.stack.imgur.com/X75p5.png)
Поток, отвечающий за удаление записей из списка, может создать sh, если запись отсутствует в списке. Поэтому и по другим причинам многопоточности я понимаю, почему некоторые объекты не удаляются из списка, но я не понимаю, как генерируются эти нулевые значения. Кто-нибудь объяснил, как эти значения генерируются?