El siguiente código explica mi pregunta. Sé que la lista no es segura para subprocesos. ¿Pero cuál es la razón "real" subyacente de esto?hilos múltiples que agregan elementos a una lista. ¿Por qué hay siempre menos elementos en la lista de lo esperado?
class Program
{
static void Main(string[] args)
{
List<string> strCol = new List<string>();
for (int i = 0; i < 10; i++)
{
int id = i;
Task.Factory.StartNew(() =>
{
AddElements(strCol);
}).ContinueWith((t) => { WriteCount(strCol, id.ToString()); });
}
Console.ReadLine();
}
private static void WriteCount(List<string> strCol, string id)
{
Console.WriteLine(string.Format("Task {0} is done. Count: {1}. Thread ID: {2}", id, strCol.Count, Thread.CurrentThread.ManagedThreadId));
}
private static void AddElements(List<string> strCol)
{
for (int i = 0; i < 20000; i++)
{
strCol.Add(i.ToString());
}
}
}
parece que algunos de los hilos se escriben entre sí. La lista interna debe estar usando un contador para incrementar a la siguiente posición, y como no es seguro para subprocesos, sobrescribe los valores –