簡體   English   中英

如何正確使用Task.ContinueWith?

[英]How to properly use Task.ContinueWith?

嘗試測試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但無濟於事)。 提前致謝。

繼續異步運行。 如果您進行一些測試:

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阻塞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM