考虑一下:
void StartUpdate(DataRequest dataRequest)
{
Task.Factory.StartNew(request => {... do something with "request" ...},
dataRequest);
}
现在,我的问题是:我可以在 lambda 表达式中使用 dataRequest,而不是将其作为第二个参数传递给 StartNew 方法吗?我担心的是 - 该方法将在不同的线程上执行,我不确定 dataRequest 在那里使用时是否会保持其状态。
最佳答案
是的,你可以。
这称为 Closure ;这是一个非常强大的功能。
线程安全性或缺乏线程安全性都没有什么不同。
无论您是通过闭包还是通过 StartNew
参数获取实例,它仍然是同一个对象。 (除非它是一个struct
,那将是无法形容的邪恶)
关于c# - Task.Factory.StartNew "action"参数和更高级别的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4342125/