除非调用 Flush,否则 TelemetryClient 不会发送任何数据

TelemetryClient does not send any data unless Flush is called

我直接在我的代码中使用 TelemetryClient (v0.17.0.576),看起来我只能在最后手动调用 Flush 时才能将数据推送到 Azure,这感觉不对。我在这里遗漏了什么吗?

var configuration = TelemetryConfiguration.CreateDefault();
configuration.InstrumentationKey = "KEY";
var client = new TelemetryClient(configuration);

for (int i = 0; i < 10; i++)
{
   log.Information("Loop: {0} {1}", i, value);

   client.Track(new TraceTelemetry(value));
}
client.Flush();

出于性能原因,Application Insights SDK 对遥测数据进行批处理并将其分块发送。要查看实际效果,您可以将 Flush 调用替换为对 Thread.Sleep (70000) 的调用,一旦应用程序终止,您将看到检测上传到 AI。

添加到 Mario Hewardt 的回答中。如果您使用 persistence channel:

TelemetryConfiguration.Active.TelemetryChannel = new PersistenceChannel();

Flush() 是同步的(所以你不需要让线程休眠一段任意的时间)。它还具有在无法联系 Application Insights 时将遥测数据保存到本地文件的好处,然后在下次 Flush() 以良好连接调用时发送。

Thread.sleep(30000) 对我有用,但 flush 在应用程序中不起作用。我想使用 Flush() 方法,因为我不能让我的应用程序休眠 30 秒。 Flush() 方法是否与特定版本相关,还是我遗漏了其他内容?

我有调用另一个控制台库的控制台应用程序,它将进一步调用另一个具有遥测功能的控制台库 class(即控制台应用程序 --> DLL --> DLL(具有遥测实现))。

不需要刷新数据 - 除非应用程序在发送最后一条跟踪后直接结束。不幸的是,Flush 还不够,它不会阻塞 (*)。所以建议是冲洗和五秒等待都做。

(*) https://github.com/microsoft/ApplicationInsights-dotnet/issues/407