for (int i = 0; i < taskCount; i++)
{
Thread thread = new Thread(ParsingDocUserIdAync);
p[1] = docStarId;
p[2] += (int)offset;
thread.Start(param);
docStarId = p[2]+1;
list.Add(thread);
}
Вы запускаете потоки, передавая в качестве аргумента один и тот же массив, при этом меняете его извне (
p
и
param
- суть один и тот же объект).
Вызов
thread.Start(param)
не гарантирует, что поток создастся и начнёт выполняться моментально.