2013-06-12 23 views
8

Qual è l'effetto di chiamare Thread.CurrentThread.Join() e se/quando avrebbe senso chiamarlo?Quando Thread.CurrentThread.Join() ha senso?

+0

hai letto la documentazione? –

+0

Hai visto questo in qualche codice da qualche parte? È abbastanza orribile persino considerare di chiamare questo. –

+0

Dovresti chiamare 't.Join()' su _another_ thread 't', non sul thread corrente. Vedere [la documentazione] (http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx). –

risposta

12

Qual è l'effetto di chiamare Thread.CurrentThread.Join()

potrete bloccare l'esecuzione del thread corrente, e in modo efficace dead lock esso. Farà bloccare il thread corrente fino al termine del thread corrente, il che non accadrà mai.

e se/quando avrebbe senso chiamarlo?

Non ha senso farlo. Non dovresti mai chiamare questo metodo in questo modo.


Su un lato nota, dal momento che si sta utilizzando .NET 4, consiglio di evitare usando Thread.Join in generale. L'utilizzo delle nuove classi /Task<T> è di gran lunga più bello in molti modi, poiché è possibile allegare continuazioni (o chiamare sempre Task.Wait() se è veramente necessario bloccare).

+0

Nota a margine: confondete C# 5 (.NET 4.5) con C# 4 (.NET 4.0)? –

+3

@JeppeStigNielsen No - 'Task' e' Task 'sono .NET 4.' await'/'async' sono C# 5, ma' Task' li ha preceduti. –

+0

@JeppeStigNielsen Vedere: http://msdn.microsoft.com/en-us/library/dd321424(v=vs.100).aspx –

1

No, CurrentThread.Join() non ha senso
Ciò potrebbe rendere la vostra fermata programma in esecuzione, rendendo il filo A attesa per filo Un per esempio.

10

Era davvero

CurrentThread.Join() 

che avete visto nel codice vero e proprio - che tipo di dubbio, a meno che non si tratta di qualche trucco per evitare che altri thread di aderire al thread corrente - o era

CurrentThread.Join(someTimeout) 

quest'ultimo è equivalente a

Thread.Sleep(someTimeout) 

eccetto che l'adesione sul thread attuale consente messaggio di pompaggio per continuare se ci si trova in una situazione GUI/COM.

1

In realtà ha senso nel mondo di osservabile. Diciamo che hai un ascoltatore di coda in main e vuoi mantenere il thread principale in esecuzione per sempre. Invece di fare while (true) e inserire il codice nel loop, l'ultima riga è possibile scrivere questo. In questo modo il thread corrente sarà anche thread principale per altri thread generati all'interno dell'applicazione. Pensa ad esso come punto di ingresso per l'app.

Problemi correlati