从 WaitHandle.Wait 构造任务

2023-11-24

我选择返回Task<T> and Task从我的对象方法中可以通过 GUI 轻松使用。有些方法只是等待其他类型的等待句柄的互斥体。有没有办法构建Task from WaitHandle.Wait()这样我就不必为此阻塞一个treadpool线程。


有一种方法可以做到这一点:您可以使用订阅 WaitHandleThreadPool.RegisterWaitForSingleObject方法并通过包装它任务完成源 class:

public static class WaitHandleEx
{
    public static Task ToTask(this WaitHandle waitHandle)
    {
        var tcs = new TaskCompletionSource<object>();

        // Registering callback to wait till WaitHandle changes its state

        ThreadPool.RegisterWaitForSingleObject(
            waitObject: waitHandle,
            callBack:(o, timeout) => { tcs.SetResult(null); }, 
            state: null, 
            timeout: TimeSpan.MaxValue, 
            executeOnlyOnce: true);

        return tcs.Task;
    }
}

Usage:

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

从 WaitHandle.Wait 构造任务 的相关文章

  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • 如何有效地测试action是否用属性(AuthorizeAttribute)修饰?

    我正在使用 MVC 并且有一种情况OnActionExecuting 我需要确定即将执行的Action方法是否用属性修饰 AuthorizeAttribute尤其 我不是问授权是否成功 失败 而是问该方法是否需要授权 对于非 MVC 人员
  • C#4做COM的时候需要调用Marshal.ReleaseComObject吗?

    我有 VS2010 并向我的项目添加了对 COM 库的引用 并且 VS 在项目中嵌入了主要互操作 如果我引用COM库中的对象并且我想快速处理它们而不等待GC 是否需要调用ReleaseComObject Marshal ReleaseCom
  • 如何将本机 C 类型与 PerformSelectorOnMainThread: 一起使用?

    我想打电话 void setDoubleValue double value using performSelectorOnMainThread 我认为可行的是 NSNumber progress NSNumber numberWithDo
  • sandcastle 未解决的装配参考

    我正在尝试使用 sandcastle 帮助文件生成器生成文档 在沙堡中构建项目时 我收到以下错误 MRefBuilder error Unresolved assembly reference Microsoft Owin Microsof
  • 使用 .Net HttpListener 进行多线程

    我有一个听众 listener new HttpListener listener Prefixes Add http 8077 listener Start listenerThread new Thread HandleRequests
  • C++ 类内线程并发

    我试图在一个类中运行两个并发线程 它们都使用相同的函数打印数据 使用 std lock guard 进行作用域锁 问题是只有第一个线程被触发 第二个线程永远不会被调用 include
  • C++并行std::sort用于浮点值

    我有一个包含数百万个浮点值的大文件 我可以使用轻松对它们进行排序std sort通过将文件读入vector现在 例如 std vector
  • 为什么将 volatile 与同步块一起使用?

    我在java中看到了一些示例 其中他们在代码块上进行同步以更改某些变量 而该变量最初被声明为易失性 我在单例类的示例中看到 他们将唯一实例声明为易失性 并且同步了该块初始化该实例 我的问题是为什么我们在同步它时声明它是易失性的 为什么我们需
  • 尝试删除文件时如何调试“共享冲突”

    我有一个多线程 C 应用程序 它创建文件 打开文件进行处理 然后在完成后删除它们 此应用程序预计会处理 1 100 个文件 当我尝试在处理后删除文件时 有点随机 很可能归因于应用程序的多线程性质 我遇到共享冲突 我的直觉告诉我 维克 你在尝
  • Android SurfaceView 使用线程绘制画布

    我正在尝试使用线程在画布上绘图来创建一个简单的游戏引擎 但我遇到了一些无法解释的奇怪问题 这个 游戏 的目的是每秒在画布上画一个圆圈 这是可行的 但不是我想要的工作方式 似乎应用程序正在两个画布之间切换 并向每个画布添加一个圆圈 这样您就可
  • Java中的process_reaper线程是什么?

    随着时间的推移 我的应用程序中逐渐积累了数百个 process reaper 线程 有人知道这些可能是什么吗 它们似乎在我使用 Runtime exec 中 但是我在 finally 语句中破坏了我的进程 但它们仍然出现 截屏 http w
  • 原始类型是易失性的还是同步的?

    在 Java 中 如果变量的大小小于或等于 32 位 则赋值是原子的 但如果变量的大小大于 32 位 则赋值不是原子的 在双重或长分配的情况下 使用什么 易失性 同步 会更有效 Like volatile double x y 同步不适用于
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • 在调用堆栈中看到大量 clr!CLR Semaphore::Wait

    我们看到很多像下面这样的调用堆栈 我可以知道什么条件 情况会发生这种情况吗 OS Thread Id 0x48654 559 Current frame ntdll NtWaitForSingleObject 0xa Child SP Re
  • SLURM 节点、任务、核心和 CPU

    有人能够澄清这些东西到底是什么吗 据我所知 节点是集群内的计算点 本质上是一台计算机 任务是可以在单个节点或多个节点上执行的进程 核心基本上是指您希望在单个节点上分配多少 CPU 来执行分配给该 CPU 的任务 它是否正确 我混淆了什么吗
  • iPhone 相当于 Application.DoEvents();

    iPHone 我们使用 MonoTouch 但 Obj C 答案还可以 我的单例域对象需要一段时间才能获取所有数据 因此它在线程中内部运行部分获取数据 我需要通知 UI 域已完成 目前我正在这样做 有没有更好的办法 在 WinForms 中
  • 带等待/通知的同步块与不带等待/通知的同步块之间的区别?

    如果我只是使用synchronized 不是wait notify方法 它仍然是线程安全的吗 有什么不同 Using synchronized使方法 块一次只能由一个线程访问 所以 是的 它是线程安全的 这两个概念是结合在一起的 而不是相互
  • 在Spring中使用什么样的“EventBus”?内置、Reactor、Akka?

    我们将在几周后启动一个新的 Spring 4 应用程序 我们希望使用一些事件驱动的架构 今年 我到处读到有关 Reactor 的内容 在网上查找时 我偶然发现了 Akka 所以现在我们有3个选择 春天的ApplicationEvent ht
  • 我们可以使用 x86_64 CPU 原子在 PCI Express 上生成复合原子操作吗?

    如您所知 从2 0版本开始 PCI Express支持复合原子操作 FetchAdd Swap CAS https pcisig com sites default files specification documents ECN Ato

随机推荐

  • 视图的 SELECT 在 FROM 子句中包含子查询

    我有两个表 我需要创建一个视图 这些表格是 credit orders id client id number of credits payment status credit usage id client id credits used
  • 带有CSS三角形的边框半径

    I have 一个矩形对角线的每一边都有自己的颜色 div width 0 height 0 border left 150px solid green border top 100px solid gray 现在我想向 div 添加边框半
  • 使我的 NumPy 数组跨进程共享

    我已经阅读了很多关于共享数组的问题 对于简单的数组来说 它似乎足够简单 但我一直试图让它适用于我拥有的数组 import numpy as np data np zeros 250 dtype float32 250000 2 float3
  • 在node.js中加载并执行外部js文件并访问局部变量?

    做一个简单的事情是否容易 可能include path to file Node js 中的命令类型 我想做的就是访问局部变量并运行脚本 人们通常如何组织比简单的 hello world 更大的 Node js 项目 功能齐全的动态网站 例
  • Excel 是否计算提供给 IF 函数的两个结果参数?

    Excel s if函数采用三个参数 一个条件 一个 if true 值和一个 if false 值 Excel 是否计算出所有三个参数的值 还是仅计算条件的值和相应的结果 澄清 我不知道是什么result of the if将会是 我想知
  • init 方法中的 [self release]、[self dealloc] 或 [super dealloc] ?

    我刚刚阅读了有关如何在 init 方法中正确失败的内容 并且文档似乎彼此不同意 一种建议抛出异常 另一种则建议清理并返回 nil 目前的最佳实践是什么 我相信普遍接受的做法是失败时返回零 但你确实想释放 self 以避免泄漏 id init
  • 如何等待数据写入管道的另一端

    我正在用 C 语言开发一个应用程序 父进程和子进程通过管道进行通信 在写入管道之前 父进程执行另一个语句 在示例代码中 我使用 sleep 10 来进行延迟 在子进程中 它应该从管道读取数据 但是子进程中管道的读取端不会读取数据 int m
  • 使用 JSoup 提取图像 src

    我正在尝试使用 jsoup 从此网页中提取所有图像网址 任何人都可以提供有关如何做到这一点的帮助吗 所有标签的格式都是这样的 但我只需要 src 图像 而不是 ajaxsrc img src http image cdnllnwnl xos
  • 使用 BACK 键隐藏键盘事件

    我注意到在Android Market Application 当您单击搜索按钮时 它会显示键盘 但是当您单击back按钮 搜索EditText变得不可见并且keyboard被隐藏 问题是我无法隐藏EditText按后退键后隐藏键盘后 因为
  • Visual Studio自定义构建步骤规则?

    使用 Visual Studio 2008 当我向 C 项目添加一个不存在的文件时 c cpp h rc或者 IDE 无法识别的任何内容都会弹出一个对话框 询问我是否要为此类文件创建自定义构建步骤规则 有谁知道如何在不添加文件的情 况下进入
  • [A]如何在javafx中使MP3重复播放?

    我希望我的 mp3 文件在完成后再次重复 但我无法创建循环来重复播放我的文件 我使用了这段代码 但只有它在完成后播放我的文件的第一秒 AudioClip myMusic myMusic setCycleCount AudioClip IND
  • 代码检查 - 命名范围参考

    在 Rubberduck 2 0 11 2453 中运行代码检查后 有 4 个范围引用被标记为 成员 Range 隐式引用 ActiveSheet 有问题的范围是指命名范围 是否有必要限定命名范围引用 Private Sub RunORat
  • gcc生成目标文件时创建目录

    gcc o abc def o def c产生def o目录中的文件abc 仅当目录存在时abc 当生成的目标文件的封闭目录不存在时 有没有办法让 gcc 创建一个目录 如果没有 那么提前自动创建目录 尤其是 Makefile 的最简单方法
  • 将 rowversion 转换为 bigint

    在我的 C 程序中 我不想使用字节数组 因此我将 rowversion 数据类型转换为 bigint SELECT CAST version AS BIGINT FROM dbo mytable 所以我收到一个数字而不是字节数组 这种转换总
  • 在 sphinx 文档中包含独立的 HTML 页面

    对于我的项目的大部分文档 我更喜欢标准的 sphinx 布局 然而 对于登陆页面 我更喜欢使用自定义 HTML CSS JS 而不使用普通 sphinx 网站的任何布局 目录或侧边栏 有没有一种方法可以在 sphinx 生成的网站中包含原始
  • 自定义属性未在样式和主题内解析

    我有一个带有自定义主题的 Android 应用程序 该应用程序是 2 3 年前开发的 我有这个风格attr xml资源文件
  • 如何在同一端口 4200 上运行 Angular 4 应用程序和 NodeJS api 以进行生产和开发?

    我已经创建了 Angular 4 应用程序 我可以使用它来运行它ng serve open它运行在localhost 4200 我想要的是我还使用创建了 apinodejs现在在同一个角度项目中我想运行该 APIlocalhost 4200
  • 这个 128 位整数乘法在汇编 (x86-64) 中如何工作?

    我正在阅读计算机系统 程序员的视角作业是描述这个算法是如何工作的 C函数 void store prod int128 dest int64 t x int64 t y dest x int128 y 集会 movq rdx rax cqt
  • 如何写下 rspec 来测试救援块?

    我有这样的方法 def className def method name some code rescue some code and error message end end 那么 如何写下 rspec 来测试救援块 如果你想拯救 就
  • 从 WaitHandle.Wait 构造任务

    我选择返回Task