C# 为什么不在示例中阻止线程呢

C# 为什么不在示例中阻止线程呢,c#,multithreading,C#,Multithreading,Thread.Sleep()正在将主线程挂起一定的毫秒数。我希望Thread.Sleep()阻止主线程,即使它是从不同的线程调用的(Task.Run()实际上创建了新线程),为什么在plesewait()调用Thread.Sleep之后,主线程上的我的循环仍然在执行?我应该暂停一下。或者是因为实际上,Thread.Sleep()按任务调用不同的线程。Run现在不完全是Thread。现在主线程的Sleep,但它指的是在Task.Run中创建的新线程。意味着它不是主线程的睡眠,而是在任务上创建的线程

Thread.Sleep()
正在将主线程挂起一定的毫秒数。我希望
Thread.Sleep()
阻止主线程,即使它是从不同的线程调用的(
Task.Run()
实际上创建了新线程),为什么在
plesewait()
调用
Thread.Sleep
之后,主线程上的我的循环仍然在执行?我应该暂停一下。或者是因为实际上,
Thread.Sleep()
按任务调用不同的线程。Run现在不完全是
Thread。现在主线程的Sleep
,但它指的是在
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");
        }
    }
类程序
{
静态void Main(字符串[]参数)
{
Task.Run(()=>plessewait());
var n=0;
而(n<10000)
{
控制台写入线(n);
n++;
}
Console.ReadLine();
}
publicstaticvoidwait()
{
睡眠(10000);
控制台。WriteLine(“睡眠后”);
}
}
我希望Thread.Sleep()能够阻止主线程,即使它被调用 来自不同的线程

让我们访问文档

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


这意味着它会阻止从中调用它的线程,Case closed

我希望thread.Sleep()会阻止主线程,即使它是从不同的线程调用的
答案是否定的,你错了。它确实会阻止你所说的
thread.Sleep()
thread.Sleep()
的线程。它会阻止从中调用它的当前线程,为什么你会认为如果你在后续线程上运行(使用任务运行),它会阻止任何其他线程?很清楚你期望的是什么,我不清楚你期望它的原因。您有两个线程,主线程,然后生成一个附加线程。在这个额外的线程上,您可以调用
thread.Sleep
,您能解释一下为什么希望主线程被这个线程阻塞吗?也许还有其他问题需要解决。@TheGeneral我认为Thread.Sleep(x)就像Task.Delay(x.Wait())