How to get awaitable Thread.Sleep?

The other answers suggesting starting a new thread are a bad idea – there’s no need to do that at all. Part of the point of async/await is to reduce the number of threads your application needs.

You should instead use Task.Delay which doesn’t require a new thread, and was designed precisely for this purpose:

// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);

This solution also has the advantage of allowing cancellation, if a cancellation token is provided. Example:

public async Task DoWork(CancellationToken token)
{
    await Task.Delay(1000, token);
}

Leave a Comment