C# 单线程挂起

C# 单线程挂起,c#,multithreading,C#,Multithreading,我开始学习线程,并编写了这段代码 static void Main(string[] args) { Thread DoAction = new Thread(StartAction); DoAction.Start(); for (int i = 0; i < 10000000; i++) { Console.WriteLine("Main Thread: {0}", i); if (i == 10000) DoAction

我开始学习线程,并编写了这段代码

static void Main(string[] args)
{
    Thread DoAction = new Thread(StartAction);
    DoAction.Start();
    for (int i = 0; i < 10000000; i++)
    {
        Console.WriteLine("Main Thread: {0}", i);
        if (i == 10000) DoAction.Suspend();
    }
}

static void StartAction()
{
    for(int i=0;i<int.MaxValue;++i)
    {
        Console.WriteLine(i);
    }
}
static void Main(字符串[]args)
{
线程DoAction=新线程(StartAction);
DoAction.Start();
对于(int i=0;i<10000000;i++)
{
WriteLine(“主线程:{0}”,i);
如果(i==10000)DoAction.Suspend();
}
}
静态void StartAction()
{

for(int i=0;iConsole是一个“线程安全”类,这意味着访问在内部由锁进行调节

一个小的(坏的)运气,你会暂停工作线程在中间的代码> >写()/<代码>。


当主线程尝试写入时,它将被挂起,而您处于死锁状态。

线程。挂起
几乎总是不安全的。在这里,您可能会挂起整个控制台。假设您挂起了
system.string
的静态构造函数(偶然)。整个
AppDomain
将很快停止


使用其他方法来同步线程。

这是一个过时的API,您不应该使用它。我建议您将时间花在研究尚未弃用的API上,或者更好地研究更高级别的抽象(如任务)。谢谢。我遵从您的建议您可以使用此类代码来获得一些了解一般来说,线程是一个很好的例子,但Jon是对的,所有这些都不应该出现在生产代码中。我希望这样一个特殊的构造函数会被特别对待(作为保护区或其他什么)。但你的观点是正确的。