15

TPLをテストしようとしたときに、単純な問題が発生しました。たとえば、コンソールウィンドウで数値(1から1000まで)を取得したいと思います。

これは私が持っているコードです:

class Program
{
    static void Main(string[] args)
    {
        Task.Factory.StartNew(Calculate).ContinueWith(task =>
                                                          {
                                                              Task.WaitAll();
                                                              Console.ReadKey();
                                                          });

    }

    private static void Calculate()
    {
        for (var number = 0; number < 1000; number++)
        {
            Console.WriteLine(number);
        }
    }
}

問題は、ウィンドウが閉じただけで何も表示されないことです。ContinueWithメソッドで何かを台無しにしたことを知っています。ContinueWithが実行されていないのではないかと思いますが(入力なしでウィンドウが閉じるため)、理由はわかりません。

任意の提案が役立ちます(MSDNを読んでみましたが、役に立ちませんでした)。前もって感謝します。

4

1 に答える 1

22

継続は非同期で実行されます。少しテストを行う場合:

public static void Main(string[] args)
{
    Task.Factory.StartNew(Calculate).ContinueWith(task =>
                                                      {
                                                          Console.WriteLine("Finished!");
                                                      });
    Console.WriteLine("Press ENTER to close...");
    Console.ReadLine();
}

わかるでしょ

ENTERを押して閉じます...

1

2

3

..。

999

終了した!

継続がブロックされないためです。

メインの実行スレッドをブロックしてタスクを待機する場合は、次の操作を実行できます。

var task = Task.Factory.StartNew(Calculate);
task.Wait();

そして、それはでブロックしWaitます。

于 2013-03-09T17:25:10.950 に答える