![]() |
1
12
问题是基于为您的作用域生成的闭包… 同样的问题也会发生在for循环中,如果你这样重写它的话。( 坏代码! ):
问题是,当您关闭委托中的变量时(在您的情况下,
引入临时变量 里面 foreach循环将纠正以下问题:
为了更详细地讨论正在发生的事情,我建议阅读 Eric Lippert's blog post: "Closing over the loop variable considered harmful" . |
![]() |
2
3
这是因为您在闭包中使用的变量的范围。 埃里克·利珀特 nice blog post explaining this 在细节上,我认为其他人(乔恩·斯基特?)也写过博客。 |
![]() |
3
3
在您的
在for循环中,您要复制整数,以便每个线程都获得自己的值。 关于这个问题有一些很好的数据 here . |
![]() |
4
2
问题是闭包关闭变量,而不是值。这意味着所有委托都将获得对同一变量的引用,并且变量的值每次都会通过循环进行更改。 这应该可以修复它:
|
![]() |
5
1
在第一种情况下,DMSID在for循环的范围内声明,每个委托捕获它自己的该变量的“实例”。 在第二个版本中,将为foreach循环的整个范围声明dmsid。每个委托捕获同一个变量——这意味着您正在从多个线程访问同一个变量,而没有锁定——可能会发生坏事情。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
pseudodev · 失败的测试仅显示堆栈跟踪,不显示完整日志 5 月前 |
![]() |
CactusCake · if语句中应有分号 6 月前 |
![]() |
Bin4ry · 子文件夹中的应用程序设置 6 月前 |