2013-06-12 10 views
8

Thread.CurrentThread.Join()を呼び出すの効果はどのような場合、及び/ときには、それを呼び出すために理にかなって?Thread.CurrentThread.Join()はいついつ理解できますか?

+0

あなたはドキュメントを読んでいますか? –

+0

これはどこかのコードで見たことがありますか?これを呼び出すことを考えることはかなりひどいです。 –

+0

現在のスレッドではなく、_another_スレッド 't'で' t.Join() 'を呼び出す必要があります。 [ドキュメント](http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx)を参照してください。 –

答えて

12

あなたは、現在のスレッドの実行、および効果的に死んだロック、それをブロックします。現在のスレッドが終了するまで、現在のスレッドはブロックされますが、これは決して発生しません。

、および/ときそれが感覚がそれを呼び出すようになるだろうか?

それは本当にこれを行うには意味がありません。この方法でこのメソッドを呼び出すべきではありません。サイドノートでは


は、.NET 4を使用していることから、私は一般的にThread.Joinを使用して避けることをお勧めします。 Task/Task<T>新しいクラスを使用すると、簡単に継続を付ける(または常にあなたが本当に阻止する必要がある場合Task.Wait()を呼び出す)ことができますように、多くの点ではるかに進歩しています。現在のスレッドに参加するために他のスレッドを防ぐために、いくつかのハックでない限り、一種の疑いどのI - -

+0

あなたのサイドノート:C#5(.NET 4.5)とC#4(.NET 4.0)を混同していますか? –

+3

@JeppeStigNielsenません - 'Task'と'タスクが '' await'/'async' .NET 4.ですがC#5ですが、' Task'は、それらを先行しました。 –

+0

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

1

いいえ、CurrentThread.Joinは()これは、スレッド例えばスレッドため待機させる、あなたのプログラムの停止運転を作ることができても意味に
を行うものではありません。

Thread.CurrentThread.Join(呼び出しの効果は何
10

は、それはあなたが実際のコードで見たことは本当に

CurrentThread.Join() 

たか、それは

CurrentThread.Join(someTimeout) 
ました

後者は現在のスレッドを可能に接合点を除い

Thread.Sleep(someTimeout) 

と等価ですあなたがGUI/COM環境にいる場合、メッセージをポンピングし続ける。

1

それは実際に観察可能なの世界に意味をなします。メインにキューリスナーがあり、メインスレッドを永続的に実行させたいとします。 while(真)を実行し、コードをループに入れるのではなく、最後の行に書くことができます。この方法では、現在のスレッドはアプリケーション内で生成された他のスレッドの親スレッドになります。 アプリのエントリーポイントと考えてください。

関連する問題