【发布时间】:2010-10-10 11:03:23
【问题描述】:
我知道 .NET lambda 表达式可以捕获外部变量。 但是,我经常看到变量作为参数显式传递给 lambda 表达式,而 .NET 库似乎也支持这一点(例如 ThreadPool.QueueUserWorkItem)。
我的问题是这些捕获的限制是什么?实际在不同线程上执行的 lambdas 与创建它们的线程(例如 ThreadPool.QueueUserWorkItem 或 Thread)或充当回调(即稍后调用)的 lambdas 怎么样?
一般来说,什么时候应该依赖捕获的变量,什么时候应该使用显式参数?例如:
public void DoStuff()
{
string message = GetMessage();
ThreadPool.QueueUserWorkItem(s => SendMessage(message)); // use captured variable
// -- OR --
ThreadPool.QueueUserWorkItem(s =>
{
string msg = (string)s;
SendMessage(msg);
}, message); // use explicit parameter
}
谢谢!
更新:修复了第二个 ThreadPool.QueueUserWorkItem 示例。
【问题讨论】:
标签: c# .net multithreading lambda