Le espressioni lambda sono multi-threaded?Le espressioni lambda sono multi-threaded?
Dire quando si scrive una formula matematica come metodo lambda, quando si passa ad un altro metodo, sarebbe multithread?
Le espressioni lambda sono multi-threaded?Le espressioni lambda sono multi-threaded?
Dire quando si scrive una formula matematica come metodo lambda, quando si passa ad un altro metodo, sarebbe multithread?
Non 100% chiaro su quello che stai chiedendo.
Stai chiedendo se i lambda sono naturalmente eseguiti su un filo diverso?
In caso affermativo no, sono solo un'altra istanza di System.Delegate ed eseguiti sul thread principale a meno che non sia specificamente richiesto di fare altrimenti.
Stai chiedendo se sono sicuri per l'esecuzione su più thread?
Questa è una domanda alla quale è possibile rispondere solo conoscendo il contenuto dell'espressione lambda. Non sono intrinsecamente thread-safe. Nella mia esperienza, è molto meno probabile essere thread-safe di quanto ci si aspetterebbe.
No, vengono eseguiti sul thread su cui sono stati creati, a meno che non lo si passi ad un altro thread, proprio come qualsiasi altro metodo. Non vorresti che funzionassero su un thread diverso automaticamente, fidati di me.
pedantically: È il filo in cui viene eseguito il delegato (es creare su un filo, passare come riferimento all'altro e il delegato è giustiziato lì). – Richard
Beh, un lambda è solo un metodo anonimo, viene eseguito su qualunque thread venga chiamato a meno che non si fornisca il codice da eseguire su un thread separato.
Nella prossima versione di C#, aggiungono opzioni di multi-threading a LINQ (chiamato PLINQ) e delegati. Scopri ulteriori informazioni here. Attualmente, è tutto su un singolo thread.
Beh, è su qualunque argomento * tu * scegli di usare ... non necessariamente solo quello. –
Inoltre sono abbastanza sicuro che sarà puramente una libreria, non una cosa specifica per C#. –
sì, probabilmente dovrei dire della prossima versione di .net. scuse. – Shawn
Come altri hanno già detto, le espressioni lambda non sono intrinsecamente multi-thread, né i metodi di estensione standard di linq-to-object fanno qualcosa di speciale per chiamarli in thread separati.
Tuttavia, se si desidera eseguire una programmazione multi-threading simile a linq, è necessario controllare lo Parallel Extensions to .NET Framework. Verificate anche questo link:
http://blogs.msdn.com/pfxteam/
Purtroppo, questo non sarà RTM fino VS2010/.Net4.0 è fuori.
Le espressioni lambda sono solo metodi come gli altri. Cosa rende multithread un metodo?
Monitor
classe, blocco di lettura/scrittura, Interlocked
accesso, WaitHandle
, ecc.), ridurre al minimo le controversie sulla serratura.Il compilatore C# è abbastanza intelligente da sapere se sono stati generati metodi statici o di istanza per i lambda.
Grazie. Quando hai detto "Cosa rende multithread un metodo?", Intendevi dire che queste linee guida lo rendono thread-thread o multi-thread quando viene eseguito? –
Voglio dire che il multithreading è thread-safe. Se un metodo (o lambda) viene chiamato da diversi thread, viene eseguito separatamente in ciascun thread, ad esempio ogni thread ha il proprio stack di chiamate. –
Risposta potenzialmente confusa (ma vera).In alcuni scenari comunemente incontrati, un lambda può essere eseguito su un'altra macchina, in un tipo di ambiente di runtime completamente diverso, e quindi su un altro thread, e il chiamante non deve necessariamente attendere il completamento dell'esecuzione remota prima di continuare.
(In particolare, se si passa a una query LINQ to SQL.)
Un buon punto, anche se non l'esecuzione più diretta e non locale – Pierreten
Grazie. Stavo chiedendo # 1. –
s/thread principale/thread corrente/come ovunque viene eseguito il delegato. – Richard