检测 ThreadPool WorkItem 已完成/等待完成

2023-12-14

无论出于何种原因,ThreadPool's QueueWorkItem不返回IAsyncResult或工作项的其他一些句柄,这将允许等待它完成。有RegisterWait...方法,但你必须通过WaitHandle并且创建它们是昂贵的(参见IAsyncResult文档,建议您推迟创建WaitHandle直到要求为止)。任务并行库将解决这个缺陷,但需要等待很长时间才能可用。那么,这样的设计有没有什么问题:

public class Concurrent<T> {
    private ManualResetEvent _resetEvent;
    private T _result;

    public Concurrent(Func<T> f) {
        ThreadPool.QueueUserWorkItem(_ => {
                                         _result = f();
                                         if (_resetEvent != null)
                                             _resetEvent.Set();
                                     });
    }

    public WaitHandle WaitHandle {
        get {
            if (_resetEvent == null)
                _resetEvent = new ManualResetEvent(_result != null);
            return _resetEvent;
        }

    ...

编辑: 我问了一个关于使用异步委托而不是线程池时出现的问题的后续问题.


嗯,在获取 WaitHandle 和设置它之间存在竞争条件。如果来电者碰巧迟到了一点点,您真的希望他们永远等待吗?

您可能应该做一些适当的锁定并保留“我已经完成”标志,以便如果您do完成后创建 WaitHandle,在返回之前设置它。

我还会亲自编写一个静态工厂方法,而不仅仅是使用公共构造函数 - 或者将其设为“创建并then显式启动”模式。在构造函数中对工作项进行排队对我来说感觉很奇怪。

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

检测 ThreadPool WorkItem 已完成/等待完成 的相关文章

  • 如何在 C++ 中对四元结构进行有效排序?

    我有一个包含 x y z 和 w 成员的结构 如何高效排序 在 C 中首先按 x 然后按 y 按 z 最后按 w 如果你想实现字典排序 那么最简单的方法是使用std tie实现小于或大于比较运算符或函子 然后使用std sort http
  • 在 PHP 扩展中,推荐从 std::string 返回值的方法

    我们有一个简单的 PHP 函数 其目的是调用 C 自由函数std string callLibrary std string 并返回其std string返回值 目前看起来是这样的 PHP FUNCTION call library cha
  • .NET:EventHandler 竞争条件修复如何工作?

    以下模式用于在引发事件时避免竞争条件 以防另一个线程取消订阅 MyEvent 使其为空 class MyClass public event EventHandler MyEvent public void F EventHandler h
  • 如何正确实现带有 close 方法的处置模式(CA1063)

    框架设计指南 第二版 第 327 页 说 考虑提供方法Close 除了Dispose 如果接近 是该领域的标准术语 这样做时 重要的是使 Close 实现与Dispose并考虑实施IDisposable Dispose方法明确 因此 按照提
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 起订量工作单元

    我是单元测试的新手 我想为我的搜索功能创建一个测试 我的服务层看起来像 public class EmployeeService BaseService IEmployeeService public EmployeeService IUn
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • C# While 循环与 For 循环?

    在 C 中 一个问题已经困扰我一段时间了 它的 While 和 For 循环之间的实际主要区别是什么 它只是纯粹的可读性吗 在 for 循环中本质上可以做的所有事情都可以在 while 循环中完成 只是在不同的地方 举这些例子 int nu
  • 使用 OpenSSL 库在 C++ 中生成 SHA 哈希值

    如何使用以下命令生成 SHA1 或 SHA2 哈希值OpenSSL https openssl org图书馆 我搜索了谷歌 找不到任何函数或示例代码 从命令行来看 很简单 printf compute sha1 openssl sha1 您
  • 在unity3D中显示数学方程

    我想使用它的 GUI 系统统一显示数学方程 有办法吗 我正在使用 C 语言在 Unity 中进行编程 如果我还可以使用 C 代码显示数学符号 这对我来说会很有用 谢谢 自 2016 年起 您可以使用TEXDraw https assetst
  • OpenMP 和 C++:this 指针

    Is thisOpenMP 中始终共享指针 尽管编译器不会抱怨以下代码default none pragma omp parallel for default none shared n for SInt i 0 i lt n i f i
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • 在 Ubuntu 16.04 上编译 PCL 1.7,CMake 生成的 Makefile 中出现错误

    我正在尝试让 PCL 1 7 点云库 而不是其他 pcl 在 Ubuntu 16 04 上运行 我最终希望用于 C 的东西 但现在我只是想让这些例子工作 我使用的是 Ubuntu GNU 5 3 1 附带的默认编译器和 Cmake 版本 3
  • 为什么 g++ 在编译的二进制文件中存储类名?

    我注意到如果我跑strings在我编译的程序上g 输出包含它使用的各种类的名称 该程序是用 O3并且没有 g or p 并且当我剥离二进制文件时 类名仍然存在 我想知道为什么有必要g 将此信息存储在二进制文件中 出现的类名似乎都是使用虚函数
  • 如何查明我的字符串是否包含“micro”Unicode 字符?

    我有一个包含实验室数据的 Excel 电子表格 如下所示 g L ppb 我想测试希腊字母 是否存在 如果发现我需要做一些特别的事情 通常 我会写这样的东西 if cell StartsWith matchSequence lt unive
  • XSD、泛型和 C# 类的困境

    我有以下简单的 XSD 文件
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • Opencv 对象检测:ORB GPU 检测器和 SURF GPU 描述符提取器

    我只是做了一个小实验来尝试不同的检测器 描述符组合 我的代码使用 ORB GPU 检测器来检测特征 并使用 SURF GPU 描述符来计算描述符 我使用 BruteForceMatcher GPU 来匹配描述符 并使用 knnMatch 方
  • 在 C# 中设置风扇速度

    我知道以前有人问过这个问题 但我似乎无法让它发挥作用 我已调用以下内容 using System Management using System Management Instrumentation using System Runtime
  • Eclipse CDT C/C++:包含另一个项目的头文件

    我在 Eclipse CDT 中有两个 C 项目main and shared In shared我有一个名为calc h 我想在中使用这个标头main 所以我做了以下事情 added include calc h到相关文件main In

随机推荐

  • 使用 JSON 对象作为负载向 REST API 发出 POST 请求

    我正在尝试使用具有 JSON 负载的 POST 请求从 REST API 获取 JSON 响应 应在发送前转换为 URL 编码文本 我已经按照一些教程来实现该过程 但收到状态代码 400 的错误 我可能没有对给定的 JSON 字符串进行编码
  • 如何在 iframe 上设置“X-Frame-Options”?

    如果我创建一个iframe像这样 var dialog div align center div dialog 如何使用 JavaScript 修复以下错误 拒绝展示 https www google com ua gws rd ssl 在
  • 执行 chrome.extension.getBackgroundPage() 时抛出错误

    我正在开发我的第一个扩展 并尝试创建一个简单的扩展来在页面上注入可拖动的 div 这很好用 但我想保留 div 在后台页面上的位置 我也在尝试本地存储 但想了解为什么这不起作用 我不需要按钮 因此没有创建 popup html 文件 我相信
  • XPath 查找节点是否存在

    使用 XPath 查询如何查找节点 标签 是否存在 例如 如果我需要确保网站页面具有正确的基本结构 例如 html body and html head title
  • 联邦学习训练期间模型性能没有提高

    我已关注这个emnist教程创建图像分类实验 7 个类别 目的是使用 TFF 框架在 3 个数据孤岛上训练分类器 在训练开始之前 我使用以下命令将模型转换为 tf keras 模型tff learning assign weights to
  • openapi java 生成器将 LocalDate 序列化为数组而不是完整日期

    我在 spring 项目中使用 OpenAPI java 生成器 1 和 library resttemplate dateLibrary java8 从规范生成客户端 对于规范中的属性 targetDate type string for
  • 如何在 launch.json 的 Visual Studio Code 中反转 ${relativeFile} 中的反斜杠?

    我正在尝试配置 Windows Visual Studio Codelaunch json推出jest测试当前文件 获取我使用的路径 relativeFile 变量给出一个带有反斜杠的字符串 如下所示 src services some s
  • 为什么unique_ptr重载reset(pointer p = point())和reset(nullptr_t)?

    根据http en cppreference com w cpp memory unique ptr reset void reset pointer ptr pointer template lt class U gt void rese
  • exec() 和变量范围[重复]

    这个问题在这里已经有答案了 我确信这个问题已经被问过并得到回答 但我找不到具体的 我刚刚开始学习Python 但我不明白变量作用域问题 我已将问题简化为以下内容 Case 1 def lev1 exec aaa 123 print lev1
  • dart-server/angulardart 和 CORS 的问题

    我在我的服务器上使用 dart 并使用 angulardart 作为我的客户端 我可以通过我的服务器上的 http get 请求数据 工作正常 但我无法让 POST 工作 服务器 服务器使用 开始 https github com lviv
  • Grails 中按关联计数排序

    我有很多 Topic 对象 每个 Topic 有很多帖子 Post 如何根据帖子数对所有主题对象进行排序 您可以使用 size 函数在一个 HQL 查询中完成此操作 这样您就可以在一个查询中获取 Topic 实例 SELECT topic
  • 设置带有 a-frame 的加载动画

    我正在使用框架加载全景照片 示例代码如下 加载照片时会显示白屏 并持续几秒钟 这会造成糟糕的用户体验 我想在加载照片时添加加载动画 但找不到任何有用的指南 有人可以帮忙吗
  • 如何在没有 APD 的情况下覆盖现有的 PHP 函数?

    我想覆盖 PHP 中已经声明的几个函数 我正在使用的应用程序充满了遗留代码 包括对eval 因此仅替换代码中调用函数的标识符可能还不够 是否可以更改已声明的函数 而不使用高级 PHP 调试器在 PHP5 中 是的 通过使用 runkit f
  • angularjs表单输入建议

    我对 AngularJS 中的表单有疑问 经典 html 和 php 示例
  • 等待加载 angularjs 指令模板

    我想做的是推迟加载指令的 Angular js 模板 直到我真正需要它为止 我什至可能根本不需要它 有没有一种方法可以让我只在需要时加载指令模板 服务可以做到这一点吗 我的应用程序已经加载了很多指令模板 我想避免加载太多的东西 除非我需要它
  • 静态强制两个对象是从相同的(Int)“种子”创建的

    在我正在开发的库中 我有一个类似于以下内容的 API data Collection a Collection Seed etc type Seed Int newCollection Seed gt IO Collection a new
  • 在二进制文件中搜索字符串的代码

    前几天我问过这个问题 如何在二进制文件中查找 ANSI 字符串 我得到了一个非常好的answer 后来变成了一个更难的问题 输入迭代器可以用在需要前向迭代器的地方吗 现在确实不是我能理解的水平 我仍在学习 C 并且正在寻找一种在二进制文件中
  • socket.io 硬编码与动态连接 url

    为什么这里的大多数教程 示例和问题都使用本地 IP 或localhost 或任何其他硬编码路径 如下所示 var socket io connect http 127 0 0 1 3700 而不是简单地 var socket io conn
  • 在 WPF 应用程序中加密凭据

    在 WPF 应用程序中 我想提供典型的 记住我 选项来记住凭据并在下次启动应用程序时自动使用它们 使用单向哈希显然不是一个选择 虽然我可以存储凭据隔离存储 or 在注册表中 加密凭证时需要处理一个问题 如果我使用对称密钥加密算法 我需要将密
  • 检测 ThreadPool WorkItem 已完成/等待完成

    无论出于何种原因 ThreadPool s QueueWorkItem不返回IAsyncResult或工作项的其他一些句柄 这将允许等待它完成 有RegisterWait 方法 但你必须通过WaitHandle并且创建它们是昂贵的 参见IA