【问题标题】:Are lambda expressions multi-threaded?lambda 表达式是多线程的吗?
【发布时间】:2009-03-17 20:50:20
【问题描述】:

lambda 表达式是多线程的吗?

说当你把一个数学公式写成一个 lambda 方法时,当你把它传递给另一个方法时,它会是多线程的吗?

【问题讨论】:

    标签: c# .net lambda parallel-processing


    【解决方案1】:

    不是 100% 清楚你在问什么。

    您是在问 lambdas 是否自然地在不同的线程上运行?

    如果不是,它们只是 System.Delegate 的另一个实例,并在主线程上运行,除非特别要求这样做。

    您是在询问它们是否可以安全地在多个线程上运行?

    这是一个只有知道 lambda 表达式的内容才能回答的问题。它们本质上不是线程安全的。根据我的经验,线程安全的可能性比您预期的要小得多。

    【讨论】:

    • s/主线程/当前线程/作为委托的执行位置。
    【解决方案2】:

    不,它们在创建它们的线程上执行,除非你将它传递给另一个线程,就像任何其他方法一样。你不会希望它们自动在不同的线程上运行,相信我。

    【讨论】:

    • 迂腐:它是执行委托的线程(例如,在一个线程上创建,作为引用传递给另一个线程,然后委托在那里执行)。
    【解决方案3】:

    在下一版本的 C# 中,他们正在向 LINQ(称为 PLINQ)和委托添加多线程选项。查看更多信息here。目前,这一切都在一个线程上。

    【讨论】:

    • 嗯,它在选择使用的任何线程上......不一定只有一个。
    • 我也很确定它纯粹是一个库,而不是 C# 特定的东西。
    • 是的,我可能应该说下一个版本的 .net。道歉。
    【解决方案4】:

    正如其他人所说,lambda 表达式本质上不是多线程的,标准的 linq-to-objects 扩展方法也没有做任何特殊的事情来在单独的线程中调用它们。

    但是,如果你想做一些类似 linq 的多线程编程,你应该查看Parallel Extensions to .NET Framework。另请查看此链接:
    http://blogs.msdn.com/pfxteam/

    不幸的是,在 VS2010/.Net4.0 出来之前,这不会是 RTM。

    【讨论】:

      【解决方案5】:

      嗯,lambda 只是一个匿名方法,它在调用它的任何线程上执行,除非您提供在单独线程上执行的代码。

      【讨论】:

        【解决方案6】:

        Lambda 表达式和其他方法一样。是什么让方法成为多线程的?

        • 无法访问外部字段(简单输入/输出方法) - 这种方法始终是多线程的
        • 访问同步字段 - 考​​虑同步场景(Monitor 类、读/写锁、Interlocked 访问、WaitHandle 等),尽量减少锁争用。
        • 访问捕获的变量(闭包) - 确保捕获的变量只要其他线程使用它就不会改变(变量的访问方式:只是读取、读取和写入...)

        C# 编译器足够聪明,可以知道是为您的 lambda 生成静态方法还是实例方法。

        【讨论】:

        • 谢谢。当您说“什么使方法成为多线程?”时,您的意思是这些准则使其在执行时是线程安全的或多线程的?
        • 我的意思是多线程是线程安全的。如果从不同的线程调用一个方法(或 lambda),它会在每个线程中分别执行,即每个线程都有自己的调用堆栈。
        【解决方案7】:

        可能令人困惑(但真实)的答案。在一些常见的场景中,lambda 可能在另一台机器上执行,在完全不同类型的运行时环境中,因此在另一个线程上,调用者不必等待远程执行完全完成才能继续。

        (特别是,如果您将其传递给 Linq To SQL 查询。)

        【讨论】:

        • 好点,即使不是最直接和非本地执行
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 2019-07-06
        相关资源
        最近更新 更多