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

标签 c# asynchronous parallel-processing taskfactory

考虑一下:

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/

相关文章:

c# - 在哪里可以找到好的 FFT 示例实现/教程?

c# - Xamarin.Forms + HockeyApp - 自动提交崩溃报告

perl - Mojolicious 和 Hypnotoad 是如何工作的?

Golang 并行性

c++ - 如何使用 openvdb(并行)foreach 访问多个网格?

c# - 以编程方式获取内容文件和主要输出

c# - PhotoChooserTask的使用

c# - Async/Await 如何处理 "old"结果?

Javascript For 循环问题

c - 数组 : "error: reduction variable must be shared on entry to this OpenMP pragma" 中的 OpenMP SIMD 缩减