.NET 10 的 ActivitySamplingResult.PropagationData:为什么 Recorded 变成了 false
来源:dev.to — 2026-08-27
📋 概述
.NET 10 改变了跟踪采样的一条小规则:当 listener 返回 PropagationData 时,子 activity 不再因为父节点携带 recorded 标志就自动变成 Recorded。作者把这条决策当作值得测试的契约,用一个固定 ActivityContext、一个 listener 与几个断言在单进程内复现并验证 Recorded 与 IsAllDataRequested 两个标志的独立性,并给出刻意选择采样结果与兼容桥的建议。
🔑 核心要点
- .NET 10 起 PropagationData 的子 activity 即使父节点 recorded 也保持 Recorded==false 且 IsAllDataRequested==false
- Recorded 控制 W3C 传播位,IsAllDataRequested 决定是否附加详细数据,二者回答不同问题
- 用固定 ActivityContext 与一个 ActivityListener 即可在单进程内确定性复现并断言契约
- 兼容旧行为可用 child.ActivityTraceFlags |= Recorded,但它不会置 IsAllDataRequested
- 默认的 OpenTelemetry parent-based 采样器不受影响,没有该问题就别加覆盖
💡 金句
记录位控制 W3C 传播位,详细数据请求决定是否附加数据,强制一个不会自动启用另一个。
👍 0
👎 0
← 返回 dev.to 首页