gpt4 book ai didi

c# - 从线程池加入线程

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:15 25 4
gpt4 key购买 nike

我有 30 多个可以并行执行的任务。
我为每个任务使用 ThreadPool。
但是在所有任务完成之前,父函数不应返回。

我需要一个线程同步句柄,当它的计数达到 0 时会释放 WaitOne。
就像是:

foo.StartWith(myTasks.Count);
foreach (var task in myTasks) {
ThreadPool.QueueUserWorkItem(state => { task(state); foo.Release(); });
}
foo.WaitOne();
Semaphore感觉不错,就是不知道怎么用在这里。

最佳答案

int running = myTasks.Count;
AutoResetEvent done = new AutoResetEvent(false);
foreach (var task in myTasks) {
ThreadPool.QueueUserWorkItem(state => {
task(state);
if (0 == Interlocked.Decrement(ref running))
done.Set ();
});
}
done.WaitOne();

在 C# 4.0 中,您可以使用新的 CountdownEvent原始。

关于c# - 从线程池加入线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com