AsyncLagerBox 是基于 tokio/reqwest 的客户端。它与 LagerBox 逐个方法一一对应,而且两者运行的是同一套传输层,因此请求体和解析逻辑不会在两者之间跑偏。
启用
blocking 是默认 feature,因此关闭默认值可以在您只想要异步客户端时,把 ureq 挡在依赖树之外。两个都启用也没问题 —— 它们可以共存。
使用方式
async。句柄类型带有前缀:AsyncSupply、AsyncGpio、AsyncDebugNet 等等。
异步客户端没有的东西
uart 和 rtt 这两个 feature 都隐含启用 blocking,因此启用它们就会把阻塞客户端拉进来,无论您是否想要。Scope 是两者共用的:它在两边都是占位实现,方法是同步的。
异步客户端上没有 RAII 式的锁守卫。请显式地取锁和释放锁,并确保错误路径上也会执行释放。
两者并用
没有什么会阻止您在测试套件中需要并行的部分使用异步客户端,而在 UART 或 RTT 会话上使用阻塞客户端:并发
Box 会按物理仪器串行化访问。对同一台仪器发出的大量并发请求并不会让它的 I/O 交错执行,因为这些请求会在 Box 上排队。并发只有在跨不同仪器时才换来真正的并行。说明
reqwest是以default-features = false引入的,因此没有 TLS 栈。与 Box 之间的流量是本地网络上或 Tailscale 上的明文 HTTP。- 异步客户端本身只需要
tokio的timefeature。上面代码片段中的macros和rt-multi-thread是为了写测试用的。 - 网关认证在两种客户端上的工作方式完全相同,自动刷新令牌也包括在内。

