Application Insights ничего не регистрирует в Azure из .Net без использования CancellationToken - PullRequest
0 голосов
/ 03 мая 2018

У меня возникает проблема при использовании следующего кода для входа в Application Insights:

var configuration = new TelemetryConfiguration();
            configuration.InstrumentationKey = "KEY";
            var client = new TelemetryClient(configuration);
            client.TrackEvent($"TEST EVENT", properties: new Dictionary<string, string>() { { $"TEST Property", $"TEST Value".ToString() } });

Всякий раз, когда я использую приведенный ниже код, телеметрия регистрируется без проблем, однако, поскольку это не асинхронный вызов, мы никогда не получим IsCancellationRequested как FALSE, и это переходит в бесконечный цикл.

CancellationTokenSource tokenSource = new CancellationTokenSource();
            CancellationToken token = tokenSource.Token;
            var configuration = new TelemetryConfiguration();
            configuration.InstrumentationKey = "KEY";
            var client = new TelemetryClient(configuration);
            while (!token.IsCancellationRequested)
            {
                client.TrackEvent($"TEST EVENT", properties: new Dictionary<string, string>() { { $"TEST Property", $"TEST Value".ToString() } });
            }

Может кто-нибудь помочь мне определить, что я здесь что-то упускаю?

-Shalabh

1 Ответ

0 голосов
/ 04 мая 2018

Есть несколько возможных причин:

  • Вы создаете новый объект TelemetryConfiguration, и по умолчанию используется простой телеметрический канал, который не имеет попыток / локального хранилища, поэтому проблемы с сетью приведут к потере событий. Вы можете использовать TelemetryConfiguration.Active, который инициализируется из ApplicationInsights.config и будет использовать ServerTelemetryChannel с повторными попытками и локальным хранилищем.
  • Приложение может выйти сразу после выполнения метода, не давая возможности заполнить буфер телеметрии и отправить телеметрию. Вы можете использовать Flush(), если это так. Один Flush() не поможет, если вы не внедрили синхронный канал , поэтому вы можете добавить Sleep().
...