【C#入門】停止は「Thread.Sleep」よりも「Task.Delay」を使う

こんにちは!エンジニアの中沢です。

C#には一定時間処理を停止するための「Sleepメソッド」と「Delayメソッド」があります。

この記事では、

  • Sleepメソッドとは
  • Sleepメソッドの使い方
  • という基本的な内容から、

  • Delayメソッドとは
  • Delayメソッドの使い方
  • などの応用的な使い方に関しても解説していきます。

    今回はこれらの方法を覚えるために、処理を停止するためのさまざまな使い方をわかりやすく解説します!

    目次

    Sleepメソッドとは

    Sleepメソッドは一定時間処理を停止するために使います。Sleepメソッドは引数に停止させる時間をミリ秒単位で指定します。

    SleepメソッドでGUIアプリケーションを停止させる場合には、ユーザーの操作を受け付けないフリーズ状態になるので注意が必要です。

    フリーズさせない非同期処理を行うには、Delayメソッドを使います。

    Sleepメソッドの使い方

    ここでは、Sleepメソッドの使い方を解説します。Sleepメソッドは、引数に停止させる時間をミリ秒単位で指定します。

    次のプログラムで確認してみましょう。

    using System;
    using System.Threading;
    
    namespace Sample
    {
        class Sample
        {
            static void SleepSample()
            {
                for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine(i);
                    Thread.Sleep(1000);
                }
            }
    
            static void Main()
            {
                Sample.SleepSample();
                Console.ReadKey();
            }
        }
    }

    実行結果:

    0
    1
    2
    3
    4

    このプログラムでは、1秒(1000ミリ秒)ごとに数値を表示しています。

    このようにして一定時間処理を停止することができました。

    Delayメソッドとは

    Delayメソッドは一定時間処理を停止するために使います。Delayメソッドは引数に停止させる時間をミリ秒単位で指定します。

    Sleepメソッドと違い、非同期処理で停止するためフリーズ状態にはなりません

    Delayメソッドの使い方

    ここでは、Delayメソッドの使い方を解説します。Delayメソッドは、引数に停止させる時間をミリ秒単位で指定します。

    Delayメソッドは非同期処理を行うため、「async」と「await」の記述が必要です。次のプログラムで確認してみましょう。

    using System;
    using System.Threading.Tasks;
    
    namespace Sample
    {
        class Sample
        {
            static async void DelaySample()
            {
                for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine(i);
                    await Task.Delay(1000);
                }
            }
    
            static void Main()
            {
                Sample.DelaySample();
                Console.ReadKey();
            }
        }
    }

    実行結果:

    0
    1
    2
    3
    4

    このプログラムでは、1秒(1000ミリ秒)ごとに数値を表示しています。

    このようにして一定時間処理を停止することができました。

    まとめ

    いかがでしたか?今回は「Sleepメソッド」と「Delayメソッド」を使って一定時間処理を停止する方法を解説しました。

    「Sleepメソッド」ではフリーズしてしまうので、「Delayメソッド」の非同期処理をぜひ活用してくださいね。

    もし、処理を停止する方法を忘れてしまったらこの記事を確認してください!

    この記事を書いた人

    【プロフィール】
    DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
    累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
    【専門分野】
    IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

    目次