Thread.Sleep为什么不在示例中阻塞线程

时间:2018-11-05 08:17:37

标签: c# multithreading

Thread.Sleep()使主线程保持一定的毫秒数。我希望Thread.Sleep()会阻塞主线程,即使它是从其他线程中调用的(实际上,Task.Run()也会创建新线程),为什么在PleaseWait()上我的主线程循环是自Thread.Sleep被调用以来仍在执行?它应该对我暂停。还是因为实际上Thread.Sleep()在Task.Run调用的不同线程上现在对于主线程而言并不是完全正确的Thread.Sleep,而是指在Task.Run中创建的新线程。是不是对于主线程而言不是睡眠,而是对于在Task.Run端创建的线程而言,这不是睡眠吗?希望一切都清楚。

class Program
    {
        static void Main(string[] args)
        {
            Task.Run(() => PleaseWait());

            var n = 0;
            while (n < 10000)
            {
                Console.WriteLine(n);
                n++;
            }

            Console.ReadLine();
        }


        public static void PleaseWait()
        {
            Thread.Sleep(10000);
            Console.WriteLine("After sleep");
        }
    }

1 个答案:

答案 0 :(得分:6)

  

我希望Thread.Sleep()阻塞主线程,即使它被调用   来自不同的线程

请访问文档

Thread.Sleep Method

  

将当前线程挂起指定的时间。

意思是它阻塞了调用它的线程,case关闭了