У вас должен быть массив чисел для печати вне вашей функции Foo.Если он внутри, каждый поток будет пытаться обработать полный список, но это не то, что вы хотите (насколько я могу судить).
Вы хотите создать новую функцию, скажем GetNextItemToProcess
это вернет следующий элемент в массиве, который еще не был обработан.Затем в вашей функции Foo
вызовите что-то вроде
lock(this)
{
string nextItem = GetNextItemToProcess();
Trace.WriteLine("ID : " + Thread.CurrentThread.GetHashCode() + " --> " + nextItem );
}
Поскольку каждый поток должен убедиться, что он правильно захватывает следующий элемент, вам необходимо заблокировать его.ВАЖНОЕ ПРИМЕЧАНИЕ: блокировка всей функции, гарантируя, что вы хотите, не подходит для многопоточности.С этим методом он мог бы быть последовательным.Потоки действительно принесут вам пользу, если каждый элемент работы может быть выполнен в произвольном порядке, что здесь не так.Если вам действительно нужен выходной сигнал «A, 2A, 3A», вам лучше делать это последовательно.Если это может быть «2A, A, 3A» или случайный порядок, в котором каждый элемент должен появиться ровно один раз, то многопоточность - это то, что вам нужно.