diff --git a/src/Sarif.WorkItems/SarifWorkItemFiler.cs b/src/Sarif.WorkItems/SarifWorkItemFiler.cs
index 24ee7866d..7ece5828c 100644
--- a/src/Sarif.WorkItems/SarifWorkItemFiler.cs
+++ b/src/Sarif.WorkItems/SarifWorkItemFiler.cs
@@ -21,6 +21,9 @@ namespace Microsoft.CodeAnalysis.Sarif.WorkItems
{
public class SarifWorkItemFiler : IDisposable
{
+ private readonly object m_syncRoot = new object();
+ private FilingClient m_filingClient = null;
+
///
/// Initializes a new instance of the class.
///
@@ -45,15 +48,34 @@ public SarifWorkItemFiler(Uri filingUri = null, SarifWorkItemContext filingConte
throw new InvalidOperationException(WorkItemsResources.InconsistentHostUrisProvided);
}
- this.FilingClient = FilingClientFactory.Create(this.FilingContext.HostUri);
-
this.Logger = ServiceProviderFactory.ServiceProvider.GetService();
Assembly.GetExecutingAssembly().LogIdentity();
this.FiledWorkItems = new List();
}
- public FilingClient FilingClient { get; set; }
+ public FilingClient FilingClient
+ {
+ get
+ {
+ if (m_filingClient == null)
+ {
+ lock (m_syncRoot)
+ {
+ if (m_filingClient == null)
+ {
+ this.FilingClient = FilingClientFactory.Create(this.FilingContext.HostUri);
+ }
+ }
+ }
+
+ return m_filingClient;
+ }
+ set
+ {
+ m_filingClient = value;
+ }
+ }
public SarifWorkItemContext FilingContext { get; }
@@ -108,6 +130,9 @@ public virtual SarifLog FileWorkItems(SarifLog sarifLog)
}
#endif
+ Logger.LogInformation("Connecting to filing client: {accountOrOrganization}", this.FilingClient.AccountOrOrganization);
+ this.FilingClient.Connect(this.FilingContext.PersonalAccessToken).Wait();
+
for (int splitFileIndex = 0; splitFileIndex < logsToProcessCount; splitFileIndex++)
{
SarifLog splitLog = logsToProcess[splitFileIndex];
@@ -153,9 +178,6 @@ public virtual IReadOnlyList SplitLogFile(SarifLog sarifLog)
sarifLog = sarifLog ?? throw new ArgumentNullException(nameof(sarifLog));
- Logger.LogInformation("Connecting to filing client: {accountOrOrganization}", this.FilingClient.AccountOrOrganization);
- this.FilingClient.Connect(this.FilingContext.PersonalAccessToken).Wait();
-
OptionallyEmittedData optionallyEmittedData = this.FilingContext.DataToRemove;
if (optionallyEmittedData != OptionallyEmittedData.None)
{