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ạyCallToChildThreadsong song.Thread.Sleep(2000): Luồng con ngủ 2 giây — luồng Main vẫn chạy (đợiReadKey).- 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+CancellationTokencho khả năng hủy.