|
|
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。每个委托捕获同一个变量——这意味着您正在从多个线程访问同一个变量,而没有锁定——可能会发生坏事情。 |