C# Lambda内Lambda
假设我们有一个lambda表达式,如C# Lambda内Lambda,c#,.net-4.0,lambda,C#,.net 4.0,Lambda,假设我们有一个lambda表达式,如 var thread= new Thread(() => { Foo1(); Foo2(() => { Foo3(); DoSomething(); } ); }); 问题是何时评估DoSomething()?在th
var thread= new Thread(() =>
{
Foo1();
Foo2(() =>
{
Foo3();
DoSomething();
}
);
});
问题是何时评估DoSomething()
?在thread
创建或调用thread.Start()
?DoSomething()
时可能永远不会被调用。只有当Foo2()
执行所给的委托时,才会调用它。因此,执行的顺序是:
线程
构造函数。委托中的所有代码均未执行thread.Start()
Foo1()
执行Foo3()
和DoSomething()
的调用,但这些调用尚未执行Foo2()
Foo2()
执行委托,则将执行Foo3()
和DoSomething()
可以从不调用该委托,也可以多次调用该委托。Foo2()可以对委托执行任何操作,包括将其指定给某个变量或完全忽略它 我们只知道如果run,它必须在线程启动且Foo1()执行后的某个时间点发生,而不会引发未捕获的异常。当然,Foo2()也可以将委托分配给一个变量,而另一个函数(可能在另一个线程上,甚至在原始线程上)可能会执行它,可能多次。它是一个