Ben
Ben

Reputation: 13

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

I'm trying to find a way of causing the program to not pause but for their to be a delay to execute certain tasks. I.e. I am trying to delay outputting 'Hello' to the console for 10 seconds for example, but the program will continue to execute the rest of the program.

Upvotes: 1

Views: 1469

Answers (5)

user6996876
user6996876

Reputation:

There are 2 typical ways to simulate a delay:

  • an asynchronous task-like: Task.Delay
  • or a blocking activity: Thread.Sleep

You seem to refer to the first situation.

Here it is an example

    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);
        }
    }

Output

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

Upvotes: 2

Damian
Damian

Reputation: 2852

You could use a combination of Task.Delay and ContinueWith methods:

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

Upvotes: 1

Ofer Barasofsky
Ofer Barasofsky

Reputation: 291

Start a new thread:

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

Upvotes: 1

Dan Field
Dan Field

Reputation: 21661

Using 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();

}

output:

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

just note that if you press a key before 10 seconds, it will exit.

Upvotes: 5

Casey O&#39;Brien
Casey O&#39;Brien

Reputation: 405

You could use 'Thread.Sleep(10000);'

See: https://msdn.microsoft.com/en-us/library/d00bd51t(v=vs.110).aspx

Upvotes: 0

Related Questions