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查询。)