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