c# await 异步编程工具类
public static class TaskCompletionSourceManager {private static Dictionary<string, TaskCompletionSource<object>> webTcsList = new();private static readonly object webTcsListLocker = new object();public static string CreateTaskCompletionSource(){// 使用泛型TaskCompletionSource并指定异步延续选项var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);var id = Guid.NewGuid().ToString();lock (webTcsListLocker){webTcsList.Add(id, tcs);}return id;}public static void CancelTaskCompletionSource(string tcsId){lock (webTcsListLocker){if (!webTcsList.TryGetValue(tcsId, out var tcs))return;if (tcs.TrySetCanceled())webTcsList.Remove(tcsId);}}public static void CompleteTaskCompletionSource(string tcsId){lock (webTcsListLocker){if (!webTcsList.TryGetValue(tcsId, out var tcs))return;if (tcs.TrySetResult(null)) // 设置结果为null webTcsList.Remove(tcsId);}}public static async Task WaitTaskCompletionSource(string tcsId, TimeSpan timeout){Task taskToWait = null;lock (webTcsListLocker){if (webTcsList.TryGetValue(tcsId, out var tcs)){taskToWait = tcs.Task;}}if (taskToWait == null)return;using (var timeoutCancellationTokenSource = new CancellationTokenSource()){if (timeout.TotalMilliseconds == 0){await taskToWait;return;}var timeoutTask = Task.Delay(timeout, timeoutCancellationTokenSource.Token);var completedTask = await Task.WhenAny(taskToWait, timeoutTask).ConfigureAwait(false);if (completedTask == timeoutTask){throw new TimeoutException($"WaitTaskCompletionSource 操作超时,时间:{timeout.TotalSeconds}秒");}else{timeoutCancellationTokenSource.Cancel();await taskToWait.ConfigureAwait(false);}}} }
桂棹兮兰桨,击空明兮溯流光。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1201757.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
算法题:字符串转换成整数。
字符串转换成整数:从原理到实战的深度解析
关键词
字符串转换、整数转换、类型转换、算法设计、边界处理、异常处理、Python实现
摘要
本文将深入探讨"字符串转换成整数"这一经典算法问题,从问题背景、核心概念、算法原理到实际应用进行全方位解析。我们将详细…
ASP.NET Core面试精讲系列三
目录
31. ASP.NET Core 中的 MVC 是什么?与“老版”ASP.NET 的 MVC 有何不同?
MVC 的定义
ASP.NET Core MVC 与 ASP.NET MVC 的主要区别
32. 什么是 Razor Pages?何时使用 Razor Pages 而不是 MVC?
推荐使用 Razor Pages 的场…
导师推荐9个AI论文工具,助你轻松搞定研究生论文写作!
导师推荐9个AI论文工具,助你轻松搞定研究生论文写作!
AI 工具如何助力论文写作?
在研究生阶段,论文写作是一项既重要又繁重的任务。随着人工智能技术的不断发展,越来越多的 AI 工具被应用于学术写作中,帮…
基于SpringBoot的高校综合医疗健康服务管理系统设计与实现
高校综合医疗健康服务管理系统的背景意义高校作为学生和教职工密集的场所,医疗健康服务需求量大且多样化。传统的高校医疗管理模式存在信息孤岛、服务效率低、资源分配不均等问题。随着信息化技术的发展,构建基于SpringBoot的高校综合医疗健康服务管理系…
别再自己硬扛了!上海靠谱心理咨询机构实测 TOP5,情绪内耗真的有解
上海私立心理咨询机构推荐:真实口碑与专业视角整理
随着社会对心理健康的关注不断提升,“心理咨询”已不再是少数人的需求,而成为各种人群(如青少年、职场人、婚恋中年、家庭关系压力者等)日常生活的一部分。在上海这样…
消费品营销战略咨询公司怎么选?哪家靠谱?
摘要:当前消费品企业在选择营销战略咨询公司时,普遍陷入“盲目跟风、适配度低、效果难落地、成本浪费”的选型困局,核心症结在于缺乏清晰的选型标准、混淆“理论型”与“实操型”咨询差异、忽视自身需求与咨询公司能…
边界之内:为何高维内插无法催生下一次科学革命?
在一个被大数据和人工智能的承诺所笼罩的时代,一种信念日益深入人心:只要有足够的数据和强大的算法,我们就能自动解锁自然界最深邃的奥秘。机器学习模型在蛋白质折叠、材料发现和气候预测等领域取得的惊人成就,似乎都在为这一愿景…
FastAPI系列(01):FastAPI介绍
本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695诞生背景
在FastAPI之前,Python已经有了多个流行的Web框架,如Flask和Django,它们分别以其简洁性和全面性获得了社区的广泛支持。然而,这些框…
VIZE SCADA-工业实时历史数据库-实时库
Vize是工业SCADA产品,V3.0发布,网址:www.vicdas.com
产品核心功能:实时库、历史库、数据采集、流程图。
特点:
自主可控、跨平台
代码自主可控、国产化设计、符合信创;跨平台,支持在Windows、Linux、国产系统,…
从嵌入式系统到智能终端
一、为什么 AIoT 成为必然趋势
传统嵌入式产品的核心任务是采集—控制—执行,系统逻辑大多基于确定性规则。而随着传感器数量激增、应用环境复杂化,仅依赖规则和阈值已难以应对现实世界的不确定性。
人工智能的引入,改变了这一范式。 通过机器学习(ML)或深度学习(DL),…
P14963 [LBA-OI R2 B] 何意味 题解
题目链接
一道神秘思维题。
不难发现本题的 1 操作等价于两个子串都尽可能进行何意味操作后,剩下的串是否相当。(这也是我思维的截至点)。
因此变成相邻消除,很难维护。考虑异或,但是不难发现异或具有交换律,因此…
构建“不崩溃”的嵌入式系统:防御性编程
一、为什么嵌入式系统更需要防御性编程
在嵌入式开发中,以下问题几乎人人都遇到过: 串口或总线数据格式异常,解析函数直接跑飞 函数被传入 NULL 指针,系统 HardFault 或复位 内存被意外覆盖,程序行为开始“玄学化” 这些问题的共同点只有一个:系统对“不可信输入”缺乏防…
《机器学习》第 7 章 - 神经网络与深度学习
前言 大家好!今天给大家分享《机器学习》第 7 章的核心内容 —— 神经网络与深度学习。这一章是机器学习从 “浅层” 走向 “深层” 的关键,我会用通俗易懂的语言拆解核心概念,搭配完整可运行的 Python 代码和直观的可视化对比图,…
DeepX OCR:以 DeepX NPU 加速 PaddleOCR 推理,在 ARM 与 x86 平台交付可规模化的高性能 OCR 能力
一、行业背景与核心挑战:OCR 规模化应用的关键瓶颈
随着文档识别技术的不断成熟,OCR 技术已从实验性阶段逐步走向实际业务场景,在政务、金融、制造、物流等多个行业中得到广泛应用。然而,在规模化落地过程中,企业逐渐…
不花钱也可以招一个“清华实习生”帮你干技术活
是不是觉得编程、搭建工具这些技术活离你很远?别担心,现在有了一个超级助手,相当于你招了一位来自清华大学计算机系的实习生,能听懂你的需求,帮你把想法一步步变成现实。它就是百度Comate(文心快码…
从零开始安装并配置开源AI编程神器OpenCode
对于个人开发者而言,选择 OpenCode 国产开源编程模型 的组合,本质上是用开源工具 国产高性价比模型复刻了甚至超越了硅谷顶尖付费产品的AI编程体验。 让我们开始安装并使用开源AI编程神器OpenCode吧!
一,第一步:环境…
全志T113的触摸屏
全志T113的触摸屏,问题解决写了程序,结果没法运行从网上查找问题,废了老长时间,结果是开发板的bug
首先用命令cat /proc/bus/input/devices查看 Linux 系统中所有已识别的输入设备
输出
root@TinaLinux:/tmp# cat …