반복기를 사용할 때마다 중단 될 수있는 예제가 있지만 for 루프와 함께 잘 작동합니다. 모든 코드는 실행중인 메소드의 로컬 변수를 사용합니다. 나는 곤두박질 친다. 내가 알지 못하는 반복자에 대한 사실이 있거나 닷넷에 정직한 버그가 있습니다. 나는 전 (前者)에 걸고있다. 플레 도움.이 코드에서 반복자 (.Net)가 신뢰할 수없는 이유
이 코드는 항상 안정적으로 작동합니다. 그것은 한 번에 하나씩 모든 요소를 하나씩 반복하고 새로운 스레드를 시작하여 메서드의 인수로 새 스레드에 정수를 전달합니다. 각 항목마다 하나씩 10 개의 스레드가 시작됩니다. 1,2,3,4,5,6,7,8,9,10 - 항상 작동합니다.
일하고 CODE :
//lstDMSID is a populated List<int> with 10 elements.
for(int i=0; i<lstDMSID.Count; i++)
{
int dmsId = lstDMSID[i];
ThreadStart ts = delegate
{
// Perform some isolated work with the integer
DoThreadWork(dmsId);
};
Thread thr = new Thread(ts);
thr.Name = dmsId.ToString();
thr.Start();
}
그리고 실제로 요소를 반복 코드. 모든 요소를 한 번에 하나씩 반복하고 새 스레드를 시작합니다. 그것은 10 개의 스레드를 시작하지만 10 개의 정수를 모두 안정적으로 얻지는 못합니다. 나는 그것이 1,2,3,3,6,7,7,8,9,10을 시작하는 것을보고있다. 나는 숫자를 잃어 가고있다.
파열의 CODE : 첫 번째 경우
//lstDMSID is a populated List<int> with 10 elements.
foreach(int dmsId in lstDMSID)
{
ThreadStart ts = delegate
{
// Perform some isolated work with the integer
DoThreadWork(dmsId);
};
Thread thr = new Thread(ts);
thr.Name = dmsId.ToString();
thr.Start();
}
을 반복 정수는 항상 아니다 같은. 그건 무작위로 보인다. –