2017-02-19 13 views
1

私はタスクベースのプログラミングを学習しており、このコードを動作させることはできません。コンソールはメッセージを1回だけ出力してから消えます。タスク内のconsole.writelineが動作しない

私が読み取り行を削除してプログラムを実行すると(デバッグモードではない)、コンソールにメッセージが表示され、続行するにはキーを押してください。私がデバッグしてconsole.writeにデバッガを置くと、それはしばらくの間うまく動作し、コンソールウィンドウが消えて再び再開します。 whileループの代わりに< 10000を使用すると、同じ動作も同じです

私が間違っていることを示唆してください。

static void Main(string[] args) 
     { 
      multitasker(); 

     } 

     static async void multitasker() 
     { 
      Task task1 = new Task(PrintMessageA); 
      task1.Start(); 
      await task1;    
     } 

     static void PrintMessageA() 
     { 
      while(true) 
      { 
       Console.WriteLine("Message from A"); 
       Console.ReadLine(); 

      } 
     } 

答えて

2

メインスレッドはブロックされず、すぐに終了します。あなたはある意味で「すべてを待って」に行かなければならず、multitaskerも待っていますが、実際には後で見るようにすることはできません。

だから最初にあなたがmultitasker

static async Task multitasker() 
{ 
    Task task1 = new Task(PrintMessageA); 
    task1.Start(); 
    await task1;    
} 

でタスクを返す問題は、あなたがMain()(エントリポイント)非同期を作ることができないので、代わりにあなたの代わりに返されたタスクにWait()を呼び出すことによって、そのスレッドをブロックする必要があります

static void Main(string[] args) 
{ 
    multitasker().Wait(); 
} 
+0

ありがとうございます。それは理にかなっている – kimi86

関連する問題