Deno 有办法跟踪异步上下文吗?

Does Deno have a Way to Track Async Contexts?

广义地说,在 NodeJS 中,只要代码 运行s 通过事件循环或微任务队列创建回调 -运行-later,程序就会创建“异步上下文” .网络请求、setTimeout 回调、Promises 等

在现代版本的 NodeJs 中,您可以使用(仍处于试验阶段)async_hooks module 来跟踪这些异步资源的生命周期。

以前版本的 NodeJS 现已弃用 process.addAsyncListener -- 由 the async-listener polyfill package 保留。

Deno 是否有任何内置或第三方功能允许用户空间代码跟踪这些异步上下文的创建?还是关于 Deno 的工作原理使它成为一个无关紧要的概念?

我不认为目前或通过第 3 方模块公开提供此类功能。

简单看了下async_hooks提供的功能(可能遗漏了一些重要的东西,请指正),似乎initpromiseResolve更像是Deno中有趣的功能( Deno 在其 API 中几乎不使用回调。

Deno 进行特权操作的方式是通过向 Rust 端发送序列化文本消息(主要是 JSON)和零拷贝缓冲区,并在 Rust 端调用带有响应的回调时从 Rust 端接收消息消息。如果我们可以通过向一些核心消息通道方法(例如Deno.core.dispatchByName(这个几乎被所有 Deno 特权操作使用,异步或同步。在 Deno.core 上还有很多有趣的其他东西可用,请参阅源代码中的 core/core.js。不知何故 handleAsyncMsgFromRust 从 Rust 接收异步消息虽然没有暴露)。

不幸的是 Deno.core 目前被冻结(实际上我是负责此更改的人)以避免覆盖(这可能导致升级时硬崩溃,因为 Deno.core 主机关键但内部不稳定 API).也许您可以在 Deno 存储库中打开一个问题,询问其他人是否愿意实现一些接口以允许用户将消息捕获回调注入概念性 sendrecv 方法。 (我目前无法投稿)