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