发布时间:2026/6/30 0:00:27
AScript异步执行与await关键字
、异步解析执行AScript提供了 Script.EvalAsync 异步方法异步执行脚本可设置 CancellationToken 参数。AScript执行模式有解析执行和编译执行两种模式这两种模式下的异步执行又有所不同1解析执行模式异步解析异步执行并且异步执行脚本中 await 后面的方法2编译执行模式异步解析同步编译同步执行脚本中 await 后面的方法则会调用 Task.Wait() 或者 TaskT.Result 来等待完成。示例1 var script new Script(); 2 // 100毫秒超时 3 var cts new CancellationTokenSource(100); 4 // 异步读取脚本文件异步解析脚本异步执行脚本如果超时100毫秒则报OperationCanceledException异常 5 var result await script.EvalAsync(File.OpenRead(mycode.txt), cancellationToken: cts.Token); 6 Console.WriteLine($value:{result.Value}, type:{result.Type});二、await关键字脚本中调用异步方法并等待完成使用 await 关键字当然也可以直接调用 Task.Wait() 或者 TaskT.Result 来等待完成为什么推荐使用 await 呢1异步执行时脚本中的方法也是异步的2同步执行时等效于 Task.Wait() 或者 TaskT.Result 3如果 await 后面的方法不是异步方法则自动忽略 await 所以脚本中使用 await 关键字更省心更安全。示例1 Funcint, int, Taskint sum async (a, b) 2 { 3 await Task.Delay(1000); 4 return a b; 5 }; 6 string s 7 var a await sum(5, 10); 8 await Task.Delay(500); 9 a 20 10 ; 11 var script new Script(); 12 script.Context.AddFunc(sum, sum); 13 // 异步执行 14 var result await script.EvalAsync(s); 15 Assert.AreEqual(35, result.Value); 16 Assert.AreEqual(typeof(int), result.Type); 17 // 同步执行等效于var a sum(5, 10).Result; Task.Delay(500).Wait(); a 20 18 Assert.AreEqual(35, script.Eval(s));await 关键字实现原理请查看源码 AScript.TokenHandlers.AwaitTokenHandler 和 AScript.Functions.AwaitFunction 。三、CancellationToken关键字1异步执行时值为 EvalAsync 方法参数中的 CancellationToken 2同步执行时值为 CancellationToken.None 。示例1 var script new Script(); 2 // 100毫秒超时 3 var cts new CancellationTokenSource(100); 4 await Assert.ThrowsExceptionAsyncTaskCanceledException(async () 5 { 6 await script.EvalAsync(await Task.Delay(1000, CancellationToken), cancellationToken: cts.Token); 7 });实现原理1 public class CancellationTokenHandler : ITokenHandler, IAsyncTokenHandler 2 { 3 public static readonly CancellationTokenHandler Instance new CancellationTokenHandler(); 4 5 public void Build(DefaultSyntaxAnalyzer analyzer, TokenAnalyzingArgs e) 6 { 7 e.IsHandled true; 8 if (!e.Ignore) 9 { 10 e.TreeBuilder.AddData(e.BuildContext, e.ScriptContext, e.Options, e.Control, CancellationToken.None); 11 } 12 } 13 14 public async Task BuildAsync(DefaultSyntaxAnalyzer analyzer, TokenAnalyzingArgs e, CancellationToken cancellationToken) 15 { 16 e.IsHandled true; 17 if (!e.Ignore) 18 { 19 e.TreeBuilder.AddData(e.BuildContext, e.ScriptContext, e.Options, e.Control, cancellationToken); 20 } 21 } 22 }在 CSharpLang 中注册 AddTokenHandler(CancellationToken, CancellationTokenHandler.Instance);四、总结AScript提供了 EvalAsync 方法来异步读取、解析、执行脚本

相关新闻

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案
2026/6/30 0:00:27

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.co…

阅读更多
GEO代理总部提供售后支持吗
2026/6/29 23:00:27

GEO代理总部提供售后支持吗

售后支持是代理合作关系中最关键的一环。代理商在前方签下客户,如果总部的售后支撑跟不上,客户效果不好、续费不上来,代理商的长期利益就会受到直接损害。那么,GEO代理总部到底提供什么样的售后支持?售后支持的三个层次…

阅读更多
【实战指南】从零部署垃圾分类AI应用:TensorFlow 2.3模型训练与PyQt5界面开发全流程
2026/6/29 23:00:27

【实战指南】从零部署垃圾分类AI应用:TensorFlow 2.3模型训练与PyQt5界面开发全流程

1. 环境配置与数据准备 第一次接触垃圾分类AI项目时,我被8万张图片的数据集吓到了。但实际操作后发现,只要环境搭对了,后面的流程就像搭积木一样简单。建议使用Anaconda创建独立环境,避免版本冲突。我常用的配置是Python 3.7 Ten…

阅读更多
SpringBoot+Vue全栈实战:从零构建企业级招投标管理系统(附完整源码与部署指南)
2026/6/30 1:00:27

SpringBoot+Vue全栈实战:从零构建企业级招投标管理系统(附完整源码与部署指南)

1. 为什么选择SpringBootVue开发招投标管理系统 招投标管理系统作为企业级应用,需要同时满足高并发、高可用和良好的用户体验。SpringBootVue的组合恰好能完美解决这些问题。我在实际项目中多次使用这套技术栈,发现它特别适合需要快速迭代的中大型项目。…

阅读更多
HbuilderX真机调试“失联”?三步定位安卓手机连接难题
2026/6/30 1:00:27

HbuilderX真机调试“失联”?三步定位安卓手机连接难题

1. 当HbuilderX遇上"失联"的安卓手机:现象诊断 真机调试是移动开发中不可或缺的环节,但很多开发者在使用HbuilderX时都遇到过这样的尴尬场景:数据线插得好好的,手机却像"闹脾气"一样死活不认。我最近就遇到一…

阅读更多
思源黑体TTF:多语言字体构建与Hinting优化终极指南
2026/6/30 1:00:27

思源黑体TTF:多语言字体构建与Hinting优化终极指南

思源黑体TTF:多语言字体构建与Hinting优化终极指南 【免费下载链接】source-han-sans-ttf A (hinted!) version of Source Han Sans 项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans-ttf 思源黑体TTF是一个专业的开源字体构建工具,…

阅读更多
Lenovo Legion Toolkit技术架构深度解析:模块化设计与性能优化方案
2026/6/30 1:00:27

Lenovo Legion Toolkit技术架构深度解析:模块化设计与性能优化方案

Lenovo Legion Toolkit技术架构深度解析:模块化设计与性能优化方案 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit …

阅读更多
告别手动刷课:U校园智能答题工具助你2小时完成一周网课
2026/6/30 1:00:27

告别手动刷课:U校园智能答题工具助你2小时完成一周网课

告别手动刷课:U校园智能答题工具助你2小时完成一周网课 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 还在为U校园平台上堆积如山的必修练习题而烦恼吗?…

阅读更多
如何快速掌握Unity手游逆向分析:Il2CppDumper完整指南
2026/6/30 0:00:27

如何快速掌握Unity手游逆向分析:Il2CppDumper完整指南

如何快速掌握Unity手游逆向分析:Il2CppDumper完整指南 【免费下载链接】Il2CppDumper Unity il2cpp reverse engineer 项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper 还在为Unity手游的IL2CPP编译代码感到困惑吗?想要深入分析热门手…

阅读更多
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告
2026/6/28 0:00:11

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

阅读更多
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?
2026/6/28 0:00:11

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

阅读更多
如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案
2026/6/30 0:00:27

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.co…

阅读更多
AScript异步执行与await关键字
2026/6/30 0:00:27

AScript异步执行与await关键字

、异步解析执行 AScript提供了 Script.EvalAsync 异步方法,异步执行脚本,可设置 CancellationToken 参数。 AScript执行模式有解析执行和编译执行两种模式,这两种模式下的异步执行又有所不同: 1)解析执行模式&#…

阅读更多
AI时代真的风水轮流转,前段时间最火的还是Claude Code,转眼间Codex就火得一塌糊涂。Codex是由OpenAI 推出的AI智能体。
2026/6/30 0:00:27

AI时代真的风水轮流转,前段时间最火的还是Claude Code,转眼间Codex就火得一塌糊涂。Codex是由OpenAI 推出的AI智能体。

它不仅能回答问题,编写代码,还能读取电脑本地文件,修改项目,浏览网页,调用外部工具,自动化执行任务,操作浏览器甚至桌面应用。 也是早早的就给身边不是程序员的亲朋好友安利了,都是用…

阅读更多
GIT修改用户名
2026/6/28 5:47:46

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/28 14:44:43

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/28 14:44:39

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多