diff --git a/src/GraphQL.Client/GraphQLHttpClient.cs b/src/GraphQL.Client/GraphQLHttpClient.cs index 1f9a3b5a..ea828ec1 100644 --- a/src/GraphQL.Client/GraphQLHttpClient.cs +++ b/src/GraphQL.Client/GraphQLHttpClient.cs @@ -15,7 +15,9 @@ namespace GraphQL.Client.Http { public class GraphQLHttpClient : IGraphQLClient { - private readonly GraphQLHttpWebSocket _graphQlHttpWebSocket; + private readonly Lazy _lazyHttpWebSocket; + private GraphQLHttpWebSocket _graphQlHttpWebSocket => _lazyHttpWebSocket.Value; + private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource(); private readonly ConcurrentDictionary, object> _subscriptionStreams = new ConcurrentDictionary, object>(); @@ -63,7 +65,7 @@ public GraphQLHttpClient(GraphQLHttpClientOptions options, IGraphQLWebsocketJson if (!HttpClient.DefaultRequestHeaders.UserAgent.Any()) HttpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version.ToString())); - _graphQlHttpWebSocket = new GraphQLHttpWebSocket(GetWebSocketUri(), this); + _lazyHttpWebSocket = new Lazy(() => new GraphQLHttpWebSocket(GetWebSocketUri(), this)); } #endregion @@ -186,7 +188,8 @@ protected virtual void Dispose(bool disposing) Debug.WriteLine($"Disposing GraphQLHttpClient on endpoint {Options.EndPoint}"); _cancellationTokenSource.Cancel(); HttpClient.Dispose(); - _graphQlHttpWebSocket.Dispose(); + if ( _lazyHttpWebSocket.IsValueCreated ) + _lazyHttpWebSocket.Value.Dispose(); _cancellationTokenSource.Dispose(); } }