等待池线程完成

2024-01-27

我很抱歉问了一个多余的问题。然而,我找到了许多解决我的问题的方法,但没有一个得到很好的解释。我希望在这里能说清楚。

我的 C# 应用程序的主线程使用线程池生成 1..n 个后台工作人员。我希望原始线程锁定,直到所有工作人员完成为止。我特别研究了 ManualResetEvent,但我不清楚它的用途。

伪:

foreach( var o in collection )
{
  queue new worker(o);
}

while( workers not completed ) { continue; }

如果有必要,我会提前知道即将排队的工人数量。


尝试这个。该函数接受一个 Action 委托列表。它将为列表中的每个项目添加一个 ThreadPool 工作条目。它将等待每个操作完成后再返回。

public static void SpawnAndWait(IEnumerable<Action> actions)
{
    var list = actions.ToList();
    var handles = new ManualResetEvent[actions.Count()];
    for (var i = 0; i < list.Count; i++)
    {
        handles[i] = new ManualResetEvent(false);
        var currentAction = list[i];
        var currentHandle = handles[i];
        Action wrappedAction = () => { try { currentAction(); } finally { currentHandle.Set(); } };
        ThreadPool.QueueUserWorkItem(x => wrappedAction());
    }

    WaitHandle.WaitAll(handles);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待池线程完成 的相关文章

随机推荐

  • 如果屏幕小于一定宽度则隐藏 div

    如果用户屏幕 document ready function if screen width gt 1024 if screen size is 1025px wide or larger yourClass css display non
  • 如何在“rails new app --skip-test-unit”之后重新启用 Rails 4 中的 Test::Unit

    I used rails new app skip test unit 因为最初 我认为我可以稍后添加测试 我开发了我的应用程序的很大一部分 现在 我想添加 Test Unit 但我找不到任何有关如何执行此操作的文档 谷歌搜索仅引导我找到
  • 如何在不使用 JS 发出新请求的情况下读取当前标头? [复制]

    这个问题在这里已经有答案了 可能的重复 在 Javascript 中访问 HTTP 标头 https stackoverflow com questions 220231 accessing http headers in javascri
  • 设置 HTTPClient get() 请求的超时

    此方法提交一个简单的 HTTP 请求并调用成功或错误回调即可 void getSimpleReply String command callback errorCallback async try HttpClientRequest req
  • 如何将 S4 槽选择器“@”重载为通用函数

    我正在尝试转动 R 中的运算符转换为 S3 系统的通用函数 基于中的章节编写 R 扩展 添加新的泛型 https cran r project org doc manuals r release R exts html Adding new
  • 选择单打和双打之一

    我有一个包含 A B 和 C 列的表 A 列可能有重复项 我需要一个查询 该查询将为我提供一个在 A 列中具有唯一值的结果集 并且我不关心它可能需要哪些重复项 我事先对其余数据一无所知 一个例子可能是 A B C 1 8 8 1 7 7 2
  • 更改 Swift 3 中 UIBarButtonItem(图像)的大小

    我正在尝试更改导航栏中某些图标的大小 但我对如何执行此操作有点困惑 到目前为止我的代码是 func setUpNavBarButtons let moreButton UIBarButtonItem image UIImage named
  • 用户“NT AUTHORITY/ANONYMOUS LOGIN”的 Azure SQL 服务器登录失败

    我正在尝试使用我的 Azure Active Directory 帐户从 SSMS 登录 Azure SQL 服务器 我已经遵循了这个指南 使用 SQL 配置和管理 Azure Active Directory 身份验证 https lea
  • 如何使用 JavaScript 返回 eval(code) 并获取对象?

    我有这段代码 我想要它做的是加载 js 文件然后运行它 当它运行时 我希望它返回一个参数 甚至更好的是一个对象 这是我页面中的代码 var runCode function var xhr new XMLHttpRequest xhr op
  • 什么是“实时”

    我无法决定是否将我的应用程序分类为 实时 或 接近实时 甚至可能是其他类别 该软件立即接收从源生成的数据 然后根据某些规则 在满足某些条件时发出警报 它采用每30秒检查最后30秒数据的方法来查看是否满足规则的标准 那是实时的吗 实时与准实时
  • 错误代码:2013。查询期间丢失与 MySQL 服务器的连接

    我拿到错误代码 2013 查询期间丢失与 MySQL 服务器的连接当我尝试使用 MySQL Workbench 向表添加索引时出错 我还注意到 每当我运行长查询时它就会出现 有没有办法增加超时值 新版本的 MySQL WorkBench 提
  • 相当于“evalin”,不需要输出参数(内部)

    背景 我正在阅读有关访问隐藏函数的内容 并开始使用builtin 我写了一个小函数 function klear x go to parent environment evalin base builtin clear x end 这会引发
  • 如何在 Android 适配器中反转使用 FirebaseUI- 获取的数据?

    我尝试使用FirebaseUI 实时数据库Android lib 使用 recycler view 适配器简单地在 viepager2 中显示数据集 当我获取数据时 我首先获取最旧的数据 并且我需要先显示最新的数据 所以我需要一个相反的顺序
  • 如何从JSP输出HTML <%! ... %> 阻止?

    刚开始学习JSP技术 遇到了瓶颈 如何从 JSP 声明块 这不起作用 服务器说没有 out U 我确实知道如何使用返回字符串的方法重写代码 但是有没有办法在 尽管它可能不是最佳的 但它仍然很有趣 您不能在指令内使用 out 变量 也不能使用
  • shell 脚本的 Groovy 参数

    我一直在尝试将我的代码分成两个不同的文件 callTheFunction groovy and theFunction groovy 从文件名可以看出 callTheFunction groovy调用中定义的函数theFunction gr
  • PostgreSQL 数据库静态加密

    如何加密静态 PostgreSQL 数据库 我找不到关于如何实现这一目标的良好文档 威胁模型在这种情况下非常重要 因为有效地加密数据库并不是一件容易的任务 这可以在 3 个不同的层完成 客户端应用程序 存储设备 数据库本身 请注意 在所有情
  • 迭代 Node.js 中的对象键

    从 Javascript 1 7 开始 有一个Iterator https developer mozilla org en New in JavaScript 1 7 Iterators对象 它允许 var a a 1 b 2 c 3 v
  • MySQL - 选择然后更新

    我有一个用 PHP 编写的脚本 其中有这一行可以正常工作以选择我需要的数据 result mysql query SELECT product name sku qty FROM supplier dropship items WHERE
  • iOS 屏幕截图部分

    我有一个应用程序使用以下代码截取 UIImageView 的屏幕截图 IBAction screenShot id sender UIGraphicsBeginImageContext sshot frame size self view
  • 等待池线程完成

    我很抱歉问了一个多余的问题 然而 我找到了许多解决我的问题的方法 但没有一个得到很好的解释 我希望在这里能说清楚 我的 C 应用程序的主线程使用线程池生成 1 n 个后台工作人员 我希望原始线程锁定 直到所有工作人员完成为止 我特别研究了