c# - Lambda 内部的 Lambda

标签 c# .net-4.0 lambda

假设我们有一个类似

的 lambda 表达式
        var thread= new Thread(() =>
        {
            Foo1();
            Foo2(() =>
            {
                Foo3();
                DoSomething();
            }
            );
        });

问题是 DoSomething() 何时求值?在 thread 创建或调用 thread.Start() 时?

最佳答案

DoSomething() 可能永远不会 被调用。它只会在 Foo2() 执行给它的委托(delegate)时被调用。所以执行顺序是:

  1. Delegate 被创建并传递给 Thread 构造函数。委托(delegate)中的代码均未执行。
  2. 可能有人调用了 thread.Start()
  3. Foo1() 执行
  4. 创建(或可能从缓存字段中检索)代表对 Foo3()DoSomething() 的调用,但这些调用尚未执行
  5. 委托(delegate)引用传递给 Foo2()
  6. 如果 Foo2() 执行委托(delegate),then Foo3()DoSomething() 将被执行

关于c# - Lambda 内部的 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7376977/

相关文章:

c# - ASP.Net 注册表中的 MS Captcha 超时持续时间

c# - Crystal Report WinForm如何修复它错误对象引用未设置为对象的实例?

c# - 我什么时候必须编译asp.net 4.0 项目?

.net - .Net Framework 4 上的可移植类库和 MVVM 支持

c# - 是否有 .NET 方法来获取 Entity Framework 连接字符串的数据源?

lambda - 从Kendo UI网格中创建具有相关对象的表达式[FilterDescriptor]

c# - 如果图片可以从 10x10 到 500x500,如何在 PictureBox 中显示图像

c# - 需要一种算法来在 C# 中创建嵌套类别

c++ - 如何为 std::for_each 中的 lambda 捕获 std::unique_ptr "by move"

c++ - lambda 的重载 &&