2012-01-08 21 views
4

私はこの小さなアプリケーションを書いています。何らかの理由で私はこのプログラムを実行するときに "Hello from a thread"を印刷できません。私はそれをデバッグし、Do()メソッドの中にブレークポイントを置く場合、それは印刷されます。Task.Factory.StartNew()は私のために働いていません

アイデア?

+6

スレッドがスピンアップする前にアプリケーションが終了すると思います。 – kenny

答えて

11

出力が表示される前にプログラムが閉じていないことを確認してください。これは私のためにうまく動作するので。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     private static void Main(string[] args) 
     { 
      Task.Factory.StartNew(Do); 
      Console.Read(); 
     } 

     private static void Do() 
     { 
      Console.WriteLine("Hello from a thread"); 
     } 
    } 
} 

編集:テキストが印刷されなかった理由に私の推論を含め、私はこれに応じて書いたコメントを追加しました。

その理由は、スレッドが文字列を画面に出力する可能性がある前にアプリケーションが終了するためです。すぐに閉じられるので、あなたはそれを見ることができません。いずれにしても、ブレークポイントで働いた理由は、アプリケーションを長く生かし続けるためです。

+1

はい、Console.Read();それを解決しました。 私はそれがなぜ必要なのか詳しく教えてもらえますか?ありがとう! – user829174

+2

スレッドが文字列を画面に出力する可能性がある前に、アプリケーションが終了するためです。すぐに閉じられるので、あなたはそれを見ることができません。いずれにしても、ブレークポイントで働いた理由は、アプリケーションを長く生かし続けるためです。 – eandersson

+0

タスクを開始すると、プログラムはメイン関数から戻り、終了します。しかし、Doは別のスレッドで非同期と呼ばれますが、遅くにプログラムはすでに終了しています。 – Fox32

2

using System; 
using System.Threading.Tasks; 

namespace ConsoleApplication3 
{ 
    internal class Program 
    { 
     static void Main(string[] args) 
     { 
      Task.Factory.StartNew(Do); 
      Console.ReadKey(); 
     } 

     static void Do() 
     { 
      Console.WriteLine("Hello from a thread"); 
     } 
    } 
} 
+0

'Do()'は決して呼び出されないので、これはうまくいかないでしょう。 – eandersson

+0

試しましたか? StartNew(Do)はDoを実行します。 http://msdn.microsoft.com/en-us/library/dd321439.aspx – kenny

+0

私は試して、それは実行されませんでした、またはうまく実行したが、新しいスレッドではありません。 OS /ハードウェアに依存する可能性があります。 – eandersson

関連する問題