Это из-за этой строки:
int skip = ((i - 1) * count) / threads;
int take = count / threads;
учитывайте threads = 3
и count = 10
Это не может охватить весь ваш список. В зависимости от количества потоков вы получаете разные округления в take
и skip
, и иногда они не могут охватывать все элементы в списке.
Возможно, вам стоит изменить это так:
for(int i = 1; i <= threads; i++)
{
int skip = ((i - 1) * count) / threads;
int take = count / threads;
if(i == threads)
take = threads - skip;
l.Add(GetSum(intList, skip, take));
}