C# lambda表达式是多线程的吗?
lambda表达式是多线程的吗C# lambda表达式是多线程的吗?,c#,.net,lambda,parallel-processing,C#,.net,Lambda,Parallel Processing,lambda表达式是多线程的吗 比如说,当你以lambda方法编写一个数学公式时,当你将它传递给另一个方法时,它会是多线程的吗?否,它们会在创建它们的线程上执行,除非你将它传递给另一个线程,就像任何其他方法一样。相信我,你不会希望它们自动运行在不同的线程上。lambda只是一个匿名方法,它会在调用它的任何线程上执行,除非你提供代码在单独的线程上执行。对你的要求不是100%清楚 您是否在询问lambda是否自然运行在不同的线程上? 如果不是,则它们只是System.Delegate的另一个实例,并
比如说,当你以lambda方法编写一个数学公式时,当你将它传递给另一个方法时,它会是多线程的吗?否,它们会在创建它们的线程上执行,除非你将它传递给另一个线程,就像任何其他方法一样。相信我,你不会希望它们自动运行在不同的线程上。lambda只是一个匿名方法,它会在调用它的任何线程上执行,除非你提供代码在单独的线程上执行。对你的要求不是100%清楚 您是否在询问lambda是否自然运行在不同的线程上? 如果不是,则它们只是System.Delegate的另一个实例,并在主线程上运行,除非特别要求这样做 您是否在询问它们在多线程上运行是否安全?
这是一个只有了解lambda表达式的内容才能回答的问题。它们并非天生的线程安全。根据我的经验,线程安全的可能性比您预期的要小得多 在C#的下一个版本中,他们将向LINQ(称为PLINQ)和委托添加多线程选项。查看更多信息。目前,所有这些都在一个线程上。正如其他人所说,lambda表达式本身并不是多线程的,标准的linq-to-objects扩展方法也没有在单独的线程中调用它们 但是,如果您想进行一些类似linq的多线程编程,您应该查看。也请查看此链接:
不幸的是,在VS2010/.Net4.0发布之前,这不会是RTM。Lambda表达式和其他方法一样都是方法。是什么使方法成为多线程的
- 无法访问外部字段(简单的输入/输出方法)-此类方法始终是多线程的
- 访问同步字段-考虑同步场景(<代码>监视器< /代码>类,读/写锁,<代码>联锁< /COD>访问,<代码> WaitHandle < /代码>等),最小化锁定冲突。
- 访问捕获的变量(闭包)-确保只要其他线程使用它,捕获的变量就不会改变(如何访问变量:仅读取、读取和写入…)
(特别是,如果您将其传递给Linq to SQL查询。)那么,它位于您选择使用的任何线程上。。。不一定只有一个。而且我很确定它将纯粹是一个库,而不是一个C#特定的东西。是的,我可能应该说下一个版本的.net。抱歉,谢谢。当你说“什么使一个方法成为多线程的?”时,你的意思是这些指导原则使它在执行时是线程安全的还是多线程的?我的意思是多线程是线程安全的。如果一个方法(或lambda)是从不同的线程调用的,它将在每个线程中分别执行,即每个线程都有自己的调用堆栈。这一点很好,即使不是最直接和非本地的执行/主线程/当前线程/作为其代理的执行位置。迂腐地说:它是执行代理的线程(例如,在一个线程上创建,作为引用传递给另一个线程,并在那里执行委托)。