在C#中,多线程编程是常见的需求。其中,一个常见的问题是如何等待所有子线程结束。在本文中,我们将演示两个示例来解决这个问题。
示例一:使用Thread.Join方法
使用Thread.Join方法是一种常见的等待子线程完成的方式。以下是示例代码:
public static void Main()
{
var threads = new List<Thread>();
for (int i = 0; i < 5; i++)
{
var thread = new Thread(() =>
{
Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} started");
Thread.Sleep(1000);
Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} ended");
});
thread.Start();
threads.Add(thread);
}
foreach (var thread in threads)
{
thread.Join();
}
Console.WriteLine("All threads ended");
}
在此示例中,我们创建了5个线程,并使用Thread.Join方法等待所有子线程完成。在每个子线程中,我们使用Thread.Sleep模拟一些耗时操作。
在调用Thread.Join方法之前,我们将所有子线程存储在一个List
示例二:使用Task.WaitAll方法
另一个等待子线程完成的方法是使用Task.WaitAll方法。以下是示例代码:
public static void Main()
{
var tasks = new List<Task>();
for (int i = 0; i < 5; i++)
{
var task = Task.Run(() =>
{
Console.WriteLine($"Task {Task.CurrentId} started");
Thread.Sleep(1000);
Console.WriteLine($"Task {Task.CurrentId} ended");
});
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
Console.WriteLine("All tasks ended");
}
在这个示例中,我们使用Task.Run方法创建了5个任务,并使用Task.WaitAll方法等待所有任务完成。在每个任务中,我们使用Thread.Sleep模拟一些耗时操作。
在创建任务后,我们将它们存储在一个List
结论
这两个示例展示了在C#中等待多个线程/任务完成的两种常见方法。无论你是使用Thread.Join方法还是Task.WaitAll方法,都可以轻松地等待多个线程。
希望这篇文章能够对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#多线程等待所有子线程结束的示例 - Python技术站