如何解决For循环主体执行的值不满足线程代码中的循环条件
这很棘手(也许不适合专家)。我正在学习C#中的并发性,并且在玩一些虚拟代码来测试线程的基础知识。我对以下代码有时会打印出 10 值的可能性感到惊讶。
Thread[] pool = new Thread[10];
for(int i = 0; i < 10; i++)
{
pool[i] = new Thread(() => Console.Write(i));
pool[i].Start();
}
典型输出类似于76881079777
。我知道值是 10 而不是1和0,因为for循环体执行了10次(不完全确定,但是我无法破坏C#)。我什至更惊讶为什么它在语句IndexOutOfRange
pool[i] = new Thread(() => Console.Write(i));
异常
据我所知,for循环执行如下:
- 检查条件(
i < 10
) - 如果条件为真,则执行正文
- 增加控制变量(
i++
) - 重复
因此,假设我无法理解如何使用值10执行主体。有什么想法吗?
解决方法
调用pool[i].Start();
并不意味着() => Console.Write(i)
立即被执行。取而代之的是,操作系统决定传递的方法何时执行(这也称为“计划”)。例如,操作系统可能会在循环完成后决定执行您的线程之一。在这种情况下,i
是10;因此这就是为什么可能输出10的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。