Task.Factory.StartNew"action"参数和更高级别的局部变量

And*_*rey 2 c# parallel-processing asynchronous taskfactory

考虑一下:

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

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

SLa*_*aks 5

是的你可以.
这被称为闭包 ; 这是一个非常强大的功能.

线程安全性或缺乏线程安全性也不例外.
无论是通过闭包还是通过StartNew参数获取实例,它仍然是同一个对象.(除非它是一个struct,这将是难以形容的邪恶)