предположим, что у нас есть лямбда-выражение типа
var thread= new Thread(() => { Foo1(); Foo2(() => { Foo3(); DoSomething(); } ); });
вопрос в том, когда DoSomething() вычисляется?thread создание или вызов thread.Start()?
DoSomething()
thread
thread.Start()
DoSomething() может никогда не вызываться .Он будет вызываться только в том случае, если Foo2() выполняет делегированный ему делегат.Таким образом, порядок выполнения:
Foo2()
Thread
Foo1()
Foo3()
Делегат может быть вызван никогда или несколько раз.Foo2 () может делать с делегатом все, что захочет, в том числе назначать его переменной или игнорировать вообще.
Мы только знаем, что при запуске это должно произойти в какой-то момент после запуска потока и выполнения Foo1 () без выдачи необработанного исключения.