2013-06-12 29 views
8

調用Thread.CurrentThread.Join()的效果是什麼,如果/什麼時候調用它會有意義?Thread.CurrentThread.Join()何時有意義?

+0

您是否閱讀過文檔? –

+0

你有沒有在某個地方看到這個代碼?甚至可以考慮調用它,這是非常糟糕的。 –

+0

你應該在_another_thread't'上調用't.Join()',而不是在當前線程上。請參閱[文檔](http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx)。 –

回答

12

什麼是調用Thread.CurrentThread.Join()的作用

你會阻塞當前線程的執行,並有效地死鎖定。它將導致當前線程阻塞,直到當前線程結束,這絕不會發生。

,如果/什麼時候有意義調用它?

這樣做確實沒有意義。你不應該以這種方式調用這個方法。


在一個側面說明,由於您使用的.NET 4,我會建議在一般使用Thread.Join避免。使用新的Task/Task<T>類在很多方面都好得多,因爲您可以輕鬆地附加延續(或者如果您確實需要阻止,請始終致電Task.Wait())。

+0

您的注意事項:您是否將C#5(.NET 4.5)與C#4(.NET 4.0)混淆? –

+3

@JeppeStigNielsen否 - 'Task'和'Task '是.NET 4.' await' /'async'是C#5,但是'Task'早於他們。 –

+0

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

1

沒有,CurrentThread.Join()是沒有意義的
這可能使你的程序停止運行,使得線程一個等待線程一個例如。

10

是不是真的

CurrentThread.Join() 

您在實際代碼看見 - 這我有點懷疑,除非是某些黑客以防止其他線程加入當前線程上 - 或者是它

CurrentThread.Join(someTimeout) 

後者相當於

Thread.Sleep(someTimeout) 

不同之處在於加入了關於當前線程允許如果您處於GUI/COM狀態,則會繼續傳輸消息。

1

它在可觀察的世界中確實有意義。比方說你在main中有一個隊列監聽器,並且你想讓主線程永遠運行。 而不是做while(true)並把你的代碼放到循環中,最後一行你可以寫這個。這樣,當前線程也將成爲應用程序內生成的其他線程的父線程。 認爲它是應用程序的入口點。