考虑一下:

void StartUpdate(DataRequest dataRequest)
{
    Task.Factory.StartNew(request => {... do something with "request" ...},
        dataRequest);
}


现在,我的问题是:我可以在lambda表达式内使用dataRequest,而不是将其作为第二个参数传递给StartNew方法吗?我担心的是-该方法将在其他线程上执行,并且我不确定dataRequest在该线程上使用时是否会保持其状态。

最佳答案

是的你可以。
这称为Closure;这是一个非常强大的功能。

线程安全性或缺乏线程安全性没有什么不同。
无论是通过闭包还是通过StartNew参数获取实例,它仍然是同一对象。 (除非它是一个struct,这简直是邪恶的)

10-05 20:30