考虑一下:
void StartUpdate(DataRequest dataRequest)
{
Task.Factory.StartNew(request => {... do something with "request" ...},
dataRequest);
}
现在,我的问题是:我可以在lambda表达式内使用dataRequest,而不是将其作为第二个参数传递给StartNew方法吗?我担心的是-该方法将在其他线程上执行,并且我不确定dataRequest在该线程上使用时是否会保持其状态。
最佳答案
是的你可以。
这称为Closure;这是一个非常强大的功能。
线程安全性或缺乏线程安全性没有什么不同。
无论是通过闭包还是通过StartNew
参数获取实例,它仍然是同一对象。 (除非它是一个struct
,这简直是邪恶的)