2016-06-07 78 views
5

在此鏈接:https://azure.microsoft.com/en-us/documentation/articles/app-insights-api-custom-events-metrics/Application Insight的TelemetryClient線程安全嗎?

它明確地說:

TelemetryClient是線程安全的。

我們建議您爲應用程序的每個模塊使用TelemetryClient實例。

但是,MSDN文檔(https://msdn.microsoft.com/en-us/library/azure/microsoft.applicationinsights.telemetryclient.aspx)說:

任何公共靜態此類型的成員(在Visual Basic中的Shared)都是線程安全的。任何實例成員不保證是線程安全的。

所以問題是,大多數函數如TrackEvent和TrackMetric都不是靜態的。如果我遵循第一篇文章,爲我的Web服務創建單例實例,是否會遇到線程問題?

+0

你不會遇到線程問題。如果你需要我,我可以進一步細化,但對於所有密集的目的,你不會遇到線程問題。 – IdahoSixString

回答

7

TelemetryClient是線程安全的。一個有效的用法是創建一個單例並重用它。你不會遇到重用實例的問題。

+0

儘管如此,您可能想要在各個地方使用TelemetryClient的新實例,以便您可以設置操作ID或其他可能希望用於將遙測鏈接在一起的字段。例如request + dependency或pageview + dependency使用共享操作ID,以便您可以查找來自特定請求或綜合瀏覽量的依賴項調用。如果您只是在整個應用程序中使用一個遙測客戶端,那麼要做到這一點有點困難。 –

+2

每個TelemtryClient都會創建自己的通道,自己的遙測初始化器,處理器等副本。這是浪費資源。管理字段應該通過遙測初始值設定程序和普通容器(如HttpContext或OperationContext或某些DI)完成。 –