Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Chương trình C# triển khai phương thức Sleep của Thread

Phương thức Thread.Sleep(milliseconds) tạm dừng luồng hiện tại trong khoảng thời gian chỉ định. Ví dụ dưới đây minh họa luồng con (child thread) ngủ 2 giây rồi tiếp tục.

Mã nguồn

using System;
using System.Threading;

namespace MyApplication {
    class ThreadCreationProgram {
        public static void CallToChildThread() {
            Console.WriteLine("Luồng con bắt đầu");
            int sleepFor = 2000; // 2000 ms = 2 giây
            Console.WriteLine("Luồng con tạm dừng {0} giây", sleepFor / 1000);
            Thread.Sleep(sleepFor);
            Console.WriteLine("Luồng con tiếp tục");
        }
        
        static void Main(string[] args) {
            ThreadStart childRef = new ThreadStart(CallToChildThread);
            Console.WriteLine("Trong Main: Tạo luồng con");
            Thread childThread = new Thread(childRef);
            childThread.Start();
            Console.ReadKey();
        }
    }
}

Kết quả

Trong Main: Tạo luồng con
Luồng con bắt đầu
Luồng con tạm dừng 2 giây
Luồng con tiếp tục

Giải thích

  • ThreadStart: Delegate trỏ đến phương thức không tham số (void Method()).
  • childThread.Start(): Khởi động luồng mới, chạy CallToChildThread song song.
  • Thread.Sleep(2000): Luồng con ngủ 2 giây — luồng Main vẫn chạy (đợi ReadKey).
  • Luồng con tự kết thúc sau khi phương thức chạy xong.

Lưu ý & Best Practice

  • Không dùng Sleep trong UI thread (WinForms/WPF/MAUI) — gây treo giao diện. Dùng await Task.Delay().
  • Sleep không chính xác tuyệt đối — OS có thể đánh thức muộn hơn vài ms.
  • Đơn vị: mili-giây. Có overload nhận TimeSpan: Thread.Sleep(TimeSpan.FromSeconds(2)).
  • Để hủy Sleep sớm: không thể (Sleep không kiểm tra CancellationToken). Dùng Task.Delay + CancellationToken cho khả năng hủy.