请教一个局部变量和lamda表达式的问题
直接举例吧
int i = 6;
ThreadPool.QueueUserWorkItem(state=>
{
int j = (int)state +8;
},i)
和
int i = 6;
ThreadPool.QueueUserWorkItem(()=>
{
int j = i+8;
})
的区别如何,哪种合理?
很多时候为了缩短代码量,用lamda写法,发现外部的变量也可以起作用,不需要作为参数传入,这样会不会出问题?
------解决方案--------------------顶一楼,关于LZ 在4楼的问题,请自行反编译查看,相信你可以马上明白
------解决方案--------------------能够访问 就能调用。不过 要注意一点 QueueUserWorkItem是异步的,外部变量可能会改变。
------解决方案--------------------
是这样的,直接用,这就是他的魅力之一。
在多线程中,要先保存在一个临时变量中,否则会有安全问题。
以下在C# in a nutshell中的一段,给你参考