【发布时间】:2022-01-06 23:12:27
【问题描述】:
对不起,如果我的问题看起来很幼稚。我是 C# 和 .Net 的新手,但我仍然对它们感兴趣。 我来自 Go-Lang 背景,并尝试学习 C#/.Net 多线程。
在 Go 中,如果不使用等待,主线程将运行并完成其逻辑而不管其他线程。 我认为它在 C# 中应该是相同的,但是,下面的代码允许所有线程完全运行。 这意味着主线程等待其他线程完成,而不使用 join() 或任何其他等待技术。 请让我知道我在这里遗漏了什么或误解了什么。
namespace TestThread
{
internal class Program
{
static void Main(string[] args)
{
Thread T1 = new Thread(PrintY);
T1.Start();
// The following is the funtion of the Main thread.
for (int i = 0; i < 10; i++) Console.Write("x");
}
static void PrintY()
{
for (int i = 0; i < 100; i++)
{
Console.Write("Y");
Thread.Sleep(100);
}
}
}
}
输出如下:
xxxxxxxxxYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY在Main 方法完成之前,我预计结果中最多有一个Y,因此进程终止。当主线程完成时,是什么让进程保持活动状态?
【问题讨论】:
-
创建一个线程需要时间,而此时主程序逻辑会执行。
-
@500-InternalServerError 我认为 OP 是在问为什么要打印任何 Y,他们希望主线程很快终止并停止
T1线程。 -
@DavidG:是的,我现在明白了——下面还有一个答案。
标签: c# .net multithreading