0

タスクを使用するとストップウォッチの時間が表示されるのに、スレッドを使用すると表示されない理由がわかりません。コードの何が問題になっていますか? 何か不足していますか?

static void Main(string[] args)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();

        //if I used this sw.Elapsed will display
        //Task t1 = Task.Factory.StartNew(runTask1);
        //Task t2 = Task.Factory.StartNew(runTask2);
        //Task.WaitAll(t1, t2);

        //if I used this sw.Elapsed will not display
        //Thread t1 = new Thread(runTask1);
        //Thread t2 = new Thread(runTask2);
        //t1.Start();
        //t2.Start();

        sw.Stop();

        Console.WriteLine(sw.Elapsed);

        Console.ReadLine();
    }

    public static void runTask1()
    {
        for (int x = 1; x <= 5000; x++)
        {
            Console.WriteLine("Run task tester 1");
        }
    }
    public static void runTask2()
    {
        for (int x = 1; x <= 5000; x++)
        {
            Console.WriteLine("Run task tester 2");
        }
    }
4

1 に答える 1

6

タスクを使用しているときは、タスクが完了するのを待ってから、ストップウォッチを停止して時間を表示します。スレッドを使用している場合、結果を表示する前にスレッドが終了するのを待たないため、スレッドからのテキストの上に表示されます。

スレッドも終了するのを待ちたい:

static void Main(string[] args)
{
    Stopwatch sw = new Stopwatch();
    sw.Start();

    // add Thread.Join at the end
    Thread t1 = new Thread(runTask1);
    Thread t2 = new Thread(runTask2);
    t1.Start();
    t2.Start();
    t1.Join();
    t2.Join();

    sw.Stop();

    Console.WriteLine(sw.Elapsed);

    Console.ReadLine();
}
于 2012-11-17T05:48:20.773 に答える