lambda 表达式是多线程的吗?
说当你把一个数学公式写成一个lambda方法时,当你把它传递给另一个方法时,它会是多线程的吗?
lambda 表达式是多线程的吗?
说当你把一个数学公式写成一个lambda方法时,当你把它传递给另一个方法时,它会是多线程的吗?
不是 100% 清楚你在问什么。
您是在问 lambdas 是否自然地在不同的线程上运行?
如果不是,它们只是 System.Delegate 的另一个实例,并在主线程上运行,除非特别要求这样做。
您是在问它们是否可以安全地在多个线程上运行?
这是一个只有知道 lambda 表达式的内容才能回答的问题。它们本质上不是线程安全的。根据我的经验,线程安全的可能性比您预期的要小得多。
不,它们在创建它们的线程上执行,除非您将它传递给另一个线程,就像任何其他方法一样。你不希望它们自动在不同的线程上运行,相信我。
在下一版本的 C# 中,他们正在向 LINQ(称为 PLINQ)和委托添加多线程选项。在这里查看更多信息。目前,这一切都在一个线程上。
正如其他人所说,lambda 表达式本质上不是多线程的,标准的 linq-to-objects 扩展方法也没有做任何特殊的事情来在单独的线程中调用它们。
但是,如果您想做一些类似 linq 的多线程编程,您应该查看Parallel Extensions to .NET Framework。另请查看此链接:http:
//blogs.msdn.com/pfxteam/
不幸的是,在 VS2010/.Net4.0 出来之前,这不会是 RTM。
lambda 只是一个匿名方法,它在调用它的任何线程上执行,除非您提供在单独线程上执行的代码。
Lambda 表达式和其他方法一样。是什么让方法成为多线程的?
Monitor
类、读/写锁、Interlocked
访问WaitHandle
等),尽量减少锁争用。C# 编译器足够聪明,可以知道是为您的 lambda 生成静态方法还是实例方法。
可能令人困惑(但真实)的答案。在一些常见的场景中,lambda 可能在另一台机器上执行,在完全不同类型的运行时环境中,因此在另一个线程上,调用者不必等待远程执行完全完成才能继续。
(具体来说,如果您将其传递给 Linq To SQL 查询。)