@@ -9,20 +9,15 @@ public sealed class DockerClient : IDockerClient
99
1010 private const string UserAgent = "Docker.DotNet" ;
1111
12- private static readonly TimeSpan SInfiniteTimeout = Timeout . InfiniteTimeSpan ;
13-
1412 private readonly HttpClient _client ;
1513
1614 private readonly Uri _endpointBaseUri ;
1715
1816 private readonly Version _requestedApiVersion ;
1917
20- private readonly ILogger _logger ;
21-
2218 internal DockerClient ( DockerClientConfiguration configuration , Version requestedApiVersion , ILogger logger = null )
2319 {
2420 _requestedApiVersion = requestedApiVersion ;
25- _logger = logger ?? NullLogger . Instance ;
2621
2722 Configuration = configuration ;
2823 DefaultTimeout = configuration . DefaultTimeout ;
@@ -75,7 +70,7 @@ await stream.ConnectAsync(timeout, cancellationToken)
7570 . ConfigureAwait ( false ) ;
7671
7772 return dockerStream ;
78- } , _logger ) ;
73+ } , logger ) ;
7974 break ;
8075
8176 case "tcp" :
@@ -85,11 +80,11 @@ await stream.ConnectAsync(timeout, cancellationToken)
8580 Scheme = configuration . Credentials . IsTlsCredentials ( ) ? "https" : "http"
8681 } ;
8782 uri = builder . Uri ;
88- handler = new ManagedHandler ( _logger ) ;
83+ handler = new ManagedHandler ( logger ) ;
8984 break ;
9085
9186 case "https" :
92- handler = new ManagedHandler ( _logger ) ;
87+ handler = new ManagedHandler ( logger ) ;
9388 break ;
9489
9590 case "unix" :
@@ -102,7 +97,7 @@ await sock.ConnectAsync(new Microsoft.Net.Http.Client.UnixDomainSocketEndPoint(p
10297 . ConfigureAwait ( false ) ;
10398
10499 return sock ;
105- } , _logger ) ;
100+ } , logger ) ;
106101 uri = new UriBuilder ( "http" , uri . Segments . Last ( ) ) . Uri ;
107102 break ;
108103
@@ -113,7 +108,7 @@ await sock.ConnectAsync(new Microsoft.Net.Http.Client.UnixDomainSocketEndPoint(p
113108 _endpointBaseUri = uri ;
114109
115110 _client = new HttpClient ( Configuration . Credentials . GetHandler ( handler ) , true ) ;
116- _client . Timeout = SInfiniteTimeout ;
111+ _client . Timeout = Timeout . InfiniteTimeSpan ;
117112 }
118113
119114 public DockerClientConfiguration Configuration { get ; }
@@ -299,7 +294,7 @@ internal Task<Stream> MakeRequestForStreamAsync(
299294 IDictionary < string , string > headers ,
300295 CancellationToken token )
301296 {
302- return MakeRequestForStreamAsync ( errorHandlers , method , path , queryString , body , headers , SInfiniteTimeout , token ) ;
297+ return MakeRequestForStreamAsync ( errorHandlers , method , path , queryString , body , headers , Timeout . InfiniteTimeSpan , token ) ;
303298 }
304299
305300 internal async Task < Stream > MakeRequestForStreamAsync (
@@ -330,7 +325,7 @@ internal async Task<HttpResponseMessage> MakeRequestForRawResponseAsync(
330325 IDictionary < string , string > headers ,
331326 CancellationToken token )
332327 {
333- var response = await PrivateMakeRequestAsync ( SInfiniteTimeout , HttpCompletionOption . ResponseHeadersRead , method , path , queryString , headers , body , token )
328+ var response = await PrivateMakeRequestAsync ( Timeout . InfiniteTimeSpan , HttpCompletionOption . ResponseHeadersRead , method , path , queryString , headers , body , token )
334329 . ConfigureAwait ( false ) ;
335330
336331 await HandleIfErrorResponseAsync ( response . StatusCode , response )
@@ -346,7 +341,7 @@ internal async Task<DockerApiStreamedResponse> MakeRequestForStreamedResponseAsy
346341 IQueryString queryString ,
347342 CancellationToken cancellationToken )
348343 {
349- var response = await PrivateMakeRequestAsync ( SInfiniteTimeout , HttpCompletionOption . ResponseHeadersRead , method , path , queryString , null , null , cancellationToken )
344+ var response = await PrivateMakeRequestAsync ( Timeout . InfiniteTimeSpan , HttpCompletionOption . ResponseHeadersRead , method , path , queryString , null , null , cancellationToken )
350345 . ConfigureAwait ( false ) ;
351346
352347 await HandleIfErrorResponseAsync ( response . StatusCode , response , errorHandlers )
@@ -367,7 +362,7 @@ internal Task<WriteClosableStream> MakeRequestForHijackedStreamAsync(
367362 IDictionary < string , string > headers ,
368363 CancellationToken cancellationToken )
369364 {
370- return MakeRequestForHijackedStreamAsync ( errorHandlers , method , path , queryString , body , headers , SInfiniteTimeout , cancellationToken ) ;
365+ return MakeRequestForHijackedStreamAsync ( errorHandlers , method , path , queryString , body , headers , Timeout . InfiniteTimeSpan , cancellationToken ) ;
371366 }
372367
373368 internal async Task < WriteClosableStream > MakeRequestForHijackedStreamAsync (
@@ -418,24 +413,26 @@ private async Task<HttpResponseMessage> PrivateMakeRequestAsync(
418413 IRequestContent data ,
419414 CancellationToken cancellationToken )
420415 {
421- var request = PrepareRequest ( method , path , queryString , headers , data ) ;
416+ using var request = PrepareRequest ( method , path , queryString , headers , data ) ;
422417
423- if ( timeout != SInfiniteTimeout )
418+ if ( Timeout . InfiniteTimeSpan == timeout )
424419 {
425- using ( var timeoutTokenSource = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken ) )
426- {
427- timeoutTokenSource . CancelAfter ( timeout ) ;
428- return await _client . SendAsync ( request , completionOption , timeoutTokenSource . Token )
429- . ConfigureAwait ( false ) ;
430- }
431- }
420+ var tcs = new TaskCompletionSource < HttpResponseMessage > ( ) ;
421+
422+ using var disposable = cancellationToken . Register ( ( ) => tcs . SetCanceled ( ) ) ;
432423
433- var tcs = new TaskCompletionSource < HttpResponseMessage > ( ) ;
434- using ( cancellationToken . Register ( ( ) => tcs . SetCanceled ( ) ) )
435- {
436424 return await await Task . WhenAny ( tcs . Task , _client . SendAsync ( request , completionOption , cancellationToken ) )
437425 . ConfigureAwait ( false ) ;
438426 }
427+ else
428+ {
429+ using var timeoutCts = new CancellationTokenSource ( timeout ) ;
430+
431+ using var linkedCts = CancellationTokenSource . CreateLinkedTokenSource ( timeoutCts . Token , cancellationToken ) ;
432+
433+ return await _client . SendAsync ( request , completionOption , linkedCts . Token )
434+ . ConfigureAwait ( false ) ;
435+ }
439436 }
440437
441438 private HttpRequestMessage PrepareRequest ( HttpMethod method , string path , IQueryString queryString , IDictionary < string , string > headers , IRequestContent data )
0 commit comments