2017-12-12 11 views
0

私がConsole.ReadLine()にコメントすると、0だけが出力されます。しかしコメントを外すと99個の数字がすべて印刷されます。 readlineは何をしますか?これをつかむのに苦労する。Console.ReadLine()とは何ですか?下のコードで行うのですか?

using System; 
using System.Threading.Tasks; 

namespace ConsoleApplication40 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Method(); 
     Console.WriteLine("Inside Main"); 
     //Console.ReadLine(); 
    } 

    public static void Method() 
    { 
     Task.Run(new Action(LongTask)); 
     Console.WriteLine("Inside Method"); 
    } 

    private static void LongTask() 
    { 
     for (int i = 0; i < 100; i++) 
     { 
      Console.Write(i + ","); 
     } 
    } 
} 
} 
+3

タスクが完了する前にアプリケーションが終了します。 'Console.ReadLine()'を追加すると、アプリケーションは入力ストリームに何かがあるまで待ちます。そのため、タスクの実行が完了するのに十分な時間です。 – Mahmoud

+0

タスクが完了するのを待っていません。 – FCin

答えて

4

Console.ReadLine()は、メインスレッドが他のスレッドがそのタスクを完了することを可能にするユーザーが何か、までブロックするようになります。それがなければ、メインスレッドとプログラムは終了してからタスクが終了する前に終了します。

+0

Thread.Sleep()のようなものですか? – Lyrk

+0

それはそうではありません。私はあなたがドキュメントを読むことをお勧めします:https://msdn.microsoft.com/en-us/library/system.console.readline(v=vs.110).aspx –

+0

ありがとうございました... – Lyrk

2

Console.ReadLine()(おそらくユーザから)入力を試みています。だから、それが待っている間、プログラムを停止しています。これが起こっている間に、LongTask()あなたは、Main()関数の終了をConsole.ReadLine()をコメントアウトした場合は99

て0を印刷し、実行している、とLongTask()は、すべての数字を印刷するための時間を持って前にプログラムが終了します。

+0

LongTask()別のスレッドで実行されていますか? – Lyrk

+0

それはTask.Run()が行うことです。 –

関連する問題