c# - 您如何正确等待所有信号量线程完成?
问题描述
我正在使用信号量将工作分散到固定数量的线程上,并且在完成所有工作之后,我想处理所有结果。我目前正在等到信号量的 CurrentCount 回到原来的限制,但是我很好奇是否有更好的方法来等到没有更多的工作/所有线程都恢复可用?
var semaphore = new SemaphoreSlim(5, 5);
foreach (var site in foundSites)
{
await semaphore.WaitAsync();
_ = Task.Run(async () =>
{
<PROCESSING CODE>
}).ContinueWith(task => semaphore.Release());
}
while (semaphore.CurrentCount < 5)
{
await Task.Delay(1);
}
<PROCESSING OF ALL PROCESSED ITEMS>
解决方案
推荐阅读
- c++ - uint8_t 转为字符串,导致无输出 C++(初级程序员)
- android - Android,Firebase Recycler Adapter 未查询数据库
- mysql - 如果表中没有数据,如何为表中的列赋予默认值?
- objective-c - iOS 9 / 10 -> 如何检查空闲/可用空间
- deployment - Julia 语言轻量级部署
- stochastic - 随机前沿生产函数需要哪些变量来衡量公司是否正在最小化成本?
- ssas - Adventure Works:根据婚姻状况计算年销售额
- apache - 将所有 example.com/page 链接解析为 page.html 文件
- mysql - Mysql2::Error: 带有外语 msql 表的未知列
- java - 写入文件时的换行问题