C# - 指定した時間待つ(スリープさせる)

Thread.Sleep または Task.Delay メソッド を使用します。

Thread.Sleep の使用方法

Thread.Sleepメソッドにスリープしたい時間をミリ秒で渡します。1秒 = 1000ミリ秒です。
using System.Threading;

Thread.Sleep(停止する時間をミリ秒で指定);
TimeSpan を使用すると、「秒」や「分」で指定できます。
using System;
using System.Threading;

Thread.Sleep(TimeSpan.FromSeconds(秒で指定));
Thread.Sleep(TimeSpan.FromMinutes(分で指定));

Task.Delay の使用方法

Task.Delayメソッドにスリープしたい時間(ミリ秒、1秒 = 1000ミリ秒)を渡すと、指定した時間後に完了するタスクを返します。停止するタイミングは、Task.Delay が返したタスクが実行された時です。
using System.Threading.Tasks;

Task 指定時間で完了するタスク = Task.Delay(停止する時間をミリ秒で指定);
TimeSpan を使用すると、「秒」や「分」で指定できます。
using System;
using System.Threading.Tasks;

Task 1秒で完了するタスク = Task.Delay(TimeSpan.FromSeconds(1));
Task 1分で完了するタスク = Task.Delay(TimeSpan.FromMinutes(1));

非同期関数 での使用例

// 非同期関数
async Task AsyncFunction()
{
    // 非同期関数を4秒停止
    await Task.Delay(4000);
}

// 非同期関数を実行
var task = AsyncFunction();

// ここで4秒停止
task.Wait();

Thread.Sleep と Task.Delay の違い

Thread.Sleep は、Thread.Sleep を実行したスレッドを中断します。Task.Delay は、指定時間後に完了するタスクを作成します。

Thread.Sleep

Task.Delay

Thread.Sleep のサンプルプログラム

次のサンプルコードは サブスレッドを4秒、メインスレッドを2秒 停止させるコンソール・アプリケーションです。
using System.Threading;

class Program
{
    private static System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();

    // メインメソッド
    static void Main(string[] args)
    {
        // 実行時間の計測開始
        stopWatch.Start();

        System.Console.WriteLine($"メインスレッド 開始    {stopWatch.Elapsed}");

        // サブスレッドを作成
        Thread subThread = new Thread(SubThreadProc);

        // サブスレッドの実行を開始
        subThread.Start();

        // メインスレッドを2秒停止
        System.Console.WriteLine($"メインスレッド 2秒停止");
        Thread.Sleep(2000);

        System.Console.WriteLine($"メインスレッド 終了    {stopWatch.Elapsed}");
    }

    // サブスレッド
    private static void SubThreadProc()
    {
        System.Console.WriteLine($" サブスレッド  開始    {stopWatch.Elapsed}");

        // サブスレッドを4秒停止
        System.Console.WriteLine($" サブスレッド  4秒停止");
        Thread.Sleep(4000);

        System.Console.WriteLine($" サブスレッド  終了    {stopWatch.Elapsed}");
    }
}
サンプルプログラムの実行結果
サンプルプログラムの実行結果

Task.Delay のサンプルプログラム

次のサンプルコードは 非同期関数内で4秒 停止させるコンソール・アプリケーションです。
using System.Threading.Tasks;

class Program
{
    private static System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();

    // メインメソッド
    static void Main(string[] args)
    {
        // 実行時間の計測開始
        stopWatch.Start();

        System.Console.WriteLine($"メインスレッド 開始    {stopWatch.Elapsed}");

        // 非同期関数の実行
        var task = AsyncFunction();

        // タスクの完了を待つ
        task.Wait();

        System.Console.WriteLine($"メインスレッド 終了    {stopWatch.Elapsed}");
    }

    // 非同期関数
    private static async Task AsyncFunction()
    {
        System.Console.WriteLine($"    非同期関数 開始    {stopWatch.Elapsed}");

        // 非同期関数を4秒停止
        System.Console.WriteLine($"    非同期関数 4秒停止");
        await Task.Delay(4000);

        System.Console.WriteLine($"    非同期関数 終了    {stopWatch.Elapsed}");
    }
}
サンプルプログラムの実行結果
サンプルプログラムの実行結果

参考資料

検証環境