Lambda里面的Lambda

HPT*_*HPT 4 c# lambda .net-4.0

假设我们有一个lambda表达式

        var thread= new Thread(() =>
        {
            Foo1();
            Foo2(() =>
            {
                Foo3();
                DoSomething();
            }
            );
        });
Run Code Online (Sandbox Code Playgroud)

问题是在DoSomething()评估时?在thread创作或打电话thread.Start()

Jon*_*eet 8

DoSomething()可能永远不会被召唤.只有在Foo2()执行它给出的委托时才会调用它.所以执行的顺序是:

  1. 创建委托并将其传递给Thread构造函数.委托中的代码都没有执行.
  2. 大概是有人打来电话thread.Start().
  3. Foo1() 执行
  4. 创建一个委托(或可能从缓存字段中检索)代表对Foo3()和的调用DoSomething(),但这些调用尚未执行
  5. 委托引用传递给 Foo2()
  6. 如果Foo2()执行该委托,然后 Foo3()DoSomething()将被执行