【发布时间】:2023-03-14 11:00:01
【问题描述】:
我在一个类中有一个静态方法:
public static void MakeThreadModified(string s)
{
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
/* run your code here */
while (true)
{
Console.WriteLine(s);
Thread.Sleep(500);
}
}).Start();
}
我在 Main() 中这样调用这个方法:
string[] str = {"A", "B", "C", "D", "E"};
foreach (var v in str)
{
MakeThreadModified(v);
}
我惊讶地发现结果是:
A
E
C
B
D
但是为什么我会得到这个结果?我以为它会不停地在控制台上连续打印从“A”到“E”的字母,但它只是每次打印每个字母一次。那么为什么会这样呢?
【问题讨论】:
-
您正在创建 5 个单独的线程,它们都进入睡眠状态。你在期待什么?当然,他们都会在睡觉前登录控制台
-
在 Main 的末尾是否有一个
Console.ReadLine()调用来阻止您的应用程序的主线程终止?如果没有,请添加它。 -
我认为通过他的循环,他希望每个线程都能继续打印字母。
-
@apomene 为什么500毫秒后没有一个线程重新开始运行?
-
@Derek 是的,这就是我想做的。
标签: c# multithreading loops