多线程 C#:未按预期返回结果

我是新手,我在 C# 中有一个多线程实现。但结果返回错误。文件<number.txt>编号为 0 到 1000。但返回值是 1 到 1000。不是 0。请帮助我理解问题所在。谢谢你。


static void Number(int number)

{

    List<string> l_number = new List<string>(File.ReadAllLines("number.txt"));

    Console.WriteLine(l_number[number]);

}


static void Main(string[] args)

{

    List<Thread> l_thread = new List<Thread>();

    int soThread = 10;


    Thread thread1 = new Thread(delegate ()

    {

        var numnum = 0;

        while (true)

        {

            for (int i = 0; i < soThread; i++)

            {

                Thread threadnew = new Thread(delegate ()

                {

                    //Console.WriteLine(numnum);

                    Number(numnum);

                });

                threadnew.Start();

                l_thread.Add(threadnew);

                numnum++;

                Thread.Sleep(100);

            }

            foreach (Thread item in l_thread)

            {

                item.Join();

            }

        }

    });


心有法竹
浏览 117回答 1
1回答

慕无忌1623718

您正在捕获 numnum- 它不是每个线程,并且时间意味着它不是捕获时的值 - 它是线程被调度时的值;尝试为每个范围创建一个变量副本,即for (int i = 0; i < soThread; i++){&nbsp; &nbsp; int copy = numnum;&nbsp; &nbsp; Thread threadnew = new Thread(delegate ()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //Console.WriteLine(copy);&nbsp; &nbsp; &nbsp; &nbsp; Number(copy);&nbsp; &nbsp; });&nbsp; &nbsp; // ...}
打开App,查看更多内容
随时随地看视频慕课网APP