>

이 오류가 왜 나타나는지 알아 내려고하는데 실패합니다. 모든 것이 괜찮다고 생각하지만 readTest의 값 "i"는 == 2입니다. ListW에는 2 개의 객체가 있고 "i"는 0과 1이어야합니다. 2가 나오는 곳. 내가 잘못하고 있습니까? 몇 가지 테스트를 수행했으며 i = 2는 readTest에서만 발생합니다. 무슨 일이야?

관심을 가져 주셔서 감사합니다

public void readTest(int i)
        {
            for (int j = 0; j != leftListList[i].getKeyValues().Length; j++)
            {
                string read = ws.Read(listW[i], wi[i].GetKey(), leftListList[i].getKeyValues()[j]);
                WsRead wsRead = wi[i].BuildRead(read, leftListList[i].getKeyValues()[j]);
                readList.Add(wsRead);
                Console.WriteLine("READ: " + leftListList[i].getKeyValues()[j]);
            }
        }
        public void threadTest()
        {
            for (int i = 0; i != listW.Length; i++)
            {
                    Thread t = new Thread(() => readTest(i));
                    t.Start();
                }
            }


  • 답변 # 1

    local변수를 소개하십시오 (예 : index ). :

    for (int i = 0; i < listW.Length; i++) // i < listW.Length is more readable
    {
        int index = i;
        ...
        else 
        {
            // now each thread has its own index
            Thread t = new Thread(() => readTest(index));
            t.Start();
        }
    }
    
    

    와이즈 비즈  마지막으로시작(새 스레드를 만드는 데시간이 걸립니다), 루프는완료되어 Thread

    i == 2

  • 이전 python - 인수와 동일한 값을 두 가지 방법으로 전달하는 방법은 무엇입니까?
  • 다음 sql - 열을 선택하고 데이터를 계산