【发布时间】:2026-01-11 21:10:02
【问题描述】:
我有一个控制台应用程序有两个线程:
public static async void Thread1()
{
for (int i = 0; i < 100; i++)
{
Debug.WriteLine("Thread1 " + i);
await MyFunc();
}
}
public static async void Thread2()
{
for (int i = 0; i < 100; i++)
{
Debug.WriteLine("Thread2 " + i);
await MyFunc();
}
}
public static void Main(string[] args)
{
MainAsync(args).GetAwaiter().GetResult();
}
private static async Task MainAsync(string[] args)
{
Console.WriteLine("Before start thread");
Thread tid1 = new Thread(Thread1);
Thread tid2 = new Thread(Thread2);
tid1.Start();
tid2.Start();
}
public static async Task MyFunc()
{
//do something
}
但是,当应用程序运行并终止时,似乎每个线程只运行一次,因为我只在输出中看到以下内容:
Before start thread
Thread1 0
Thread2 0
//some thing from MyFunc
我希望或者宁愿不想在 for 循环之前运行每个线程。在我看来,尽管等待,for 循环仍会继续运行。 如果是,还有什么其他可能的方法。
任何线索都会有所帮助。
【问题讨论】:
-
为什么 new Thread() vs await Thread1()?或者将 thread1() 和 THread2() 添加到数组并使用 Task.WaitAll()?
-
我复制了你的代码,我在“调试输出”窗口中看到了
Thread1 0 - Thread1 99和Thread2 0 - Thread2 99...所以我没有复制代码。 -
确实如此。上述两个 cmets 都高度相关。
MyFunc究竟做了什么? -
您介绍的
Thread和Task之间的可互换性让我担心您并不真正了解其中的区别。 "There is no thread"
标签: c# multithreading for-loop locking semaphore