假设我们有一个lambda表达式像LAMBDA内LAMBDA
var thread= new Thread(() =>
{
Foo1();
Foo2(() =>
{
Foo3();
DoSomething();
}
);
});
的问题是,当DoSomething()
评估?在thread
创建或致电thread.Start()
?
假设我们有一个lambda表达式像LAMBDA内LAMBDA
var thread= new Thread(() =>
{
Foo1();
Foo2(() =>
{
Foo3();
DoSomething();
}
);
});
的问题是,当DoSomething()
评估?在thread
创建或致电thread.Start()
?
DoSomething()
可能从来没有被调用。只有在Foo2()
执行给定的委托时才会被调用。所以执行的顺序是:
Thread
构造函数。委托中的代码都没有执行。thread.Start()
。Foo1()
执行Foo3()
和DoSomething()
的呼叫,但这些呼叫还没有执行Foo2()
Foo2()
执行委托,然后Foo3()
和DoSomething()
将被执行委托库仑d被称为从不或多次。 Foo2()可以对代理做任何事情,包括将其分配给某个变量或完全忽略它。
我们只知道如果运行它,它必须在线程启动后的某个点发生,并且Foo1()已经执行而没有抛出未捕获的异常。
当然,Foo2()也可以将委托赋值给一个变量,并且很久以后(甚至可能在另一个线程,甚至原始线程上)的另一个函数可能最终执行它,可能会多次。它是 – cdiggins