假設我們有一個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