,可以通过以下步骤实现:
下面是一个示例代码:
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
int numTasks = 10;
AutoResetEvent[] resetEvents = new AutoResetEvent[numTasks];
for (int i = 0; i < numTasks; i++)
{
resetEvents[i] = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(state =>
{
// 执行任务
Console.WriteLine($"Task {state} is running");
// 模拟任务耗时
Thread.Sleep(1000);
// 任务完成,发出信号
resetEvents[(int)state].Set();
}, i);
}
// 等待所有线程完成
WaitHandle.WaitAll(resetEvents);
Console.WriteLine("All tasks have completed");
}
}
在上述示例中,我们创建了10个任务,并将它们添加到线程池中。每个任务都会打印出自己的编号,并模拟一个耗时的任务。在任务完成后,通过调用对应的AutoResetEvent对象的Set方法发出信号。
最后,我们使用WaitHandle.WaitAll方法等待所有的AutoResetEvent对象发出信号,即等待所有线程完成。在所有线程完成后,打印出"All tasks have completed"的消息。
腾讯云相关产品和产品介绍链接地址:
云原生正发声
云原生正发声
Elastic 实战工作坊
Elastic 实战工作坊
云+社区技术沙龙[第15期]
T-Day
云+社区技术沙龙[第17期]
云+社区技术沙龙[第9期]
领取专属 10元无门槛券
手把手带您无忧上云