2016-06-07 9 views
5

Auf diesem Link: https://azure.microsoft.com/en-us/documentation/articles/app-insights-api-custom-events-metrics/Ist der TelemetryClient-Thread von Application Insight sicher?

Er sagt ausdrücklich:

TelemetryClient Thread-sicher ist.

Wir empfehlen, für jedes Modul Ihrer App eine Instanz von TelemetryClient zu verwenden.

jedoch die MSDN-Dokumentation (https://msdn.microsoft.com/en-us/library/azure/microsoft.applicationinsights.telemetryclient.aspx) sagt:

Alle öffentlichen static (Shared in Visual Basic) Member dieses Typs Thread-sicher sind. Es ist nicht garantiert, dass alle Instanzmitglieder Thread-sicher sind.

Also das Problem ist, die meisten Funktionen wie TrackEvent und TrackMetric sind nicht statisch. Wenn ich dem ersten Artikel folge und eine Singleton-Instanz für meinen Web-Service hätte, würde ich dann Threading-Probleme bekommen?

+0

Sie werden keine Gewindeprobleme bekommen. Wenn Sie mich brauchen, kann ich in weitere Einzelheiten gehen, die ich kann, aber für alle intensiven Zwecke werden Sie nicht in Threading-Probleme geraten. – IdahoSixString

Antwort

7

TelemetryClient ist Thread-sicher. Eine gültige Verwendung besteht darin, ein Singleton zu erstellen und es wiederzuverwenden. Sie werden nicht auf Probleme stoßen, die eine Instanz wiederverwenden.

+0

möchten Sie möglicherweise neue Instanzen von TelemetryClient von verschiedenen Orten verwenden, damit Sie eine Vorgangs-ID oder andere Felder festlegen können, die Sie möglicherweise verwenden, um Telemetrie miteinander zu verknüpfen. Zum Beispiel verwenden Anforderung + Abhängigkeit oder Seitenaufruf + Abhängigkeit eine ID einer gemeinsam genutzten Operation, so dass Sie Abhängigkeitsaufrufe finden können, die von einer bestimmten Anfrage oder einem Seitenaufruf stammen. Wenn Sie nur einen Telemetryclient in Ihrer gesamten App verwenden, ist es etwas schwieriger, dies zu tun. –

+2

Jeder TelemtryClient erstellt seinen eigenen Kanal, eigene Kopien von Telemetrie-Initialisierern, Prozessoren usw. Es ist eine Verschwendung von Ressourcen. Das Verwalten von Feldern sollte über Telemetrie-Initialisierer und allgemeine Container wie HttpContext oder OperationContext oder einige DI erfolgen. –