Lambda inside Lambda
本文关键字:Lambda inside | 更新日期: 2023-09-27 18:08:08
假设我们有一个类似的lambda表达式
var thread= new Thread(() =>
{
Foo1();
Foo2(() =>
{
Foo3();
DoSomething();
}
);
});
问题是CCD_ 1何时评估?在创建thread
时还是在调用thread.Start()
时?
DoSomething()
可能永远不会被调用。只有当Foo2()
执行它所给定的委托时,才会调用它。所以执行顺序是:
- 将创建委托并将其传递给
Thread
构造函数。委托中的任何代码都不会执行 - 大概有人打电话给
thread.Start()
Foo1()
执行- 创建了一个代表对
Foo3()
和DoSomething()
0的调用的委托(或可能从缓存字段中检索(,但这些调用尚未执行 - 委托引用传递给
Foo2()
- 如果
Foo2()
执行委托,则将执行Foo3()
和DoSomething()
委托可以从不调用或多次调用。Foo2((可以对委托执行任何它想要的操作,包括将它分配给某个变量或完全忽略它。
我们只知道,如果运行,它必须发生在线程启动和Foo1((执行后的某个时刻,而不会引发未捕获的异常。