首页 新闻 搜索 专区 学院

第一次发帖,大佬帮忙看一下什么问题

0
悬赏园豆:5 [已解决问题] 解决于 2022-11-21 10:45


大佬帮忙看一下,是什么原因造成的,不能这么写吗,我是一个新手,不是很懂

小科技的主页 小科技 | 初学一级 | 园豆:197
提问于:2022-11-21 01:01
< >
分享
最佳答案
1

Task.Run是异步的,由于没有加await等待,里面的代码没来得及执行就循环到了 i == list.Count,然后每个task都用的同一个变量i,最终将是6个读取list[6]的task。可以加await(异步等待),或者用一个临时变量在循环中代替i(每个task用上独有的变量)

收获园豆:4
复制粘贴机器人 | 菜鸟二级 |园豆:306 | 2022-11-21 09:08

谢谢,明白了

小科技 | 园豆:197 (初学一级) | 2022-11-21 10:43
其他回答(1)
0
for (int i = 0; i < list.Count; i++)
{
    int j = i;// 在循环内定义变量接收i,保证每个任务都是独立变量
    Task.Run(() =>
    {
        Invoke(new Action(() =>
        {
            Console.WriteLine(list[j]);//输出每个任务对应的值
        }));
    });
}
收获园豆:1
三人乐乐 | 园豆:4593 (老鸟四级) | 2022-11-21 09:48

谢谢,明白了

支持(0) 反对(0) 小科技 | 园豆:197 (初学一级) | 2022-11-21 10:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册