.NET MAUI中TelemetryClient离线数据丢失:Bug还是设计如此?
.NET MAUI中TelemetryClient离线数据丢失问题分析
测试发现.NET MAUI里的TelemetryClient在离线时的数据留存表现不一致:短时间离线后恢复连接,离线期间产生的数据能成功同步到Azure Insights;但离线10-15分钟后,这部分数据会丢失,推测是客户端离线时自动触发Flush操作导致的。
TelemetryClient默认使用InMemoryChannel。
测试过程
- 启动Android模拟器,通过adb shell命令关闭设备网络
- 在.NET MAUI应用内操作,生成pageViews和customEvents类型的遥测数据
- 恢复网络后等待数分钟(未手动执行Flush),用Kusto查询Azure Insights数据:
pageViews | where timestamp >= ago(45m) customEvents | where timestamp >= ago(45m)
测试结果
- 离线时长仅数秒时,恢复网络后能在Azure Insights中看到离线期间的点击事件和页面浏览数据
- 离线10-15分钟时,离线期间的数据完全丢失
- 恢复网络后新产生的点击事件可正常同步至Azure Insights
推测原因
TelemetryClient默认每30秒触发一次Flush,或内存中消息达到500条时触发Flush。离线状态下触发Flush时,数据无法发送到Azure Insights,进而导致数据丢失。
目前不确定这种「偶发数据丢失」是Bug还是设计预期,但从逻辑上看更倾向于是Bug——既然TelemetryClient是在内存中存储数据,为何无法Flush时要删除数据,而不是保留到联网后再发送?这一逻辑存在矛盾。
内容的提问来源于stack exchange,提问作者YMC
相关产品推荐
相关产品推荐

