2017-02-14 60 views
1

我试图找到一种方法,导致程序不会暂停,但他们是延迟执行某些任务。即例如,我试图延迟输出“Hello”给控制台10秒,但程序将继续执行程序的其余部分。C#延迟 - 延迟输出到控制台,而程序继续执行

+0

你可以启动它本身暂停10秒,然后写入控制台另一个线程。 – David

回答

1

启动一个新的线程:

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

使用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秒的关键,它将退出。

2

有模拟延迟2种典型的方式:

  • 一个异步任务,如: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