簡體   English   中英

C#延遲-繼續執行程序時輸出到控制台的延遲

[英]C# Delay - delay in outputting to console while execution of program continues

我正在嘗試找到一種使程序不暫停但使它們延遲執行某些任務的方法。 即,例如,我試圖將向控制台輸出“ Hello”的時間延遲10秒鍾,但是程序將繼續執行程序的其余部分。

使用TPL:

static void Main(string[] args)
{
    Console.WriteLine("Starting at " + DateTime.Now.ToString());

    Task.Run(() =>
    {
        Thread.Sleep(10000);
        Console.WriteLine("Done sleeping " + DateTime.Now.ToString());
    });

    Console.WriteLine("Press any Key...");

    Console.ReadKey();

}

輸出:

Starting at 2/14/2017 3:05:09 PM
Press any Key...
Done sleeping 2/14/2017 3:05:19 PM

只是請注意,如果您在10秒鍾前按下一個鍵,它將退出。

有兩種模擬延遲的典型方法:

  • 類似於異步任務的任務: Task.Delay
  • 或阻止活動: Thread.Sleep

您似乎是指第一種情況。

這是一個例子

    public static void Main(string[] args)
    {
        Both();
    }
    static void Both() {
        var list = new Task [2];
        list[0]  = PauseAndWrite();
        list[1]  =  WriteMore();
        Task.WaitAll(list);
    }
    static async Task PauseAndWrite() {
        await Task.Delay(2000);
        Console.WriteLine("A !");
    }
    static async Task WriteMore() {

        for(int i = 0; i<5; i++) {
            await Task.Delay(500);
            Console.WriteLine("B - " + i);
        }
    }

輸出量

B - 0
B - 1
B - 2
A !
B - 3
B - 4

啟動一個新線程:

Task.Factory.StartNew(new Action(() =>
{
    Thread.Sleep(1000 * 10); // sleep for 10 seconds
    Console.Write("Whatever");
}));

您可以結合使用Task.DelayContinueWith方法:

Task.Delay(10000).ContinueWith(_ => Console.WriteLine("Done"));

您可以使用“ Thread.Sleep(10000);”

請參閱: https : //msdn.microsoft.com/zh-cn/library/d00bd51t(v=vs.110).aspx

暫無
暫無

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

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