为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
心有法竹 2022-12-24 14:43:41
我是新手,我在 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();            }        }    });
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您正在捕获 numnum- 它不是每个线程,并且时间意味着它不是捕获时的值 - 它是线程被调度时的值;尝试为每个范围创建一个变量副本,即


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

{

    int copy = numnum;

    Thread threadnew = new Thread(delegate ()

    {

        //Console.WriteLine(copy);

        Number(copy);

    });


    // ...

}


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号