diff --git a/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPoolManager.cs b/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPoolManager.cs index c7f70725895ec..8f94693a66788 100644 --- a/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPoolManager.cs +++ b/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPoolManager.cs @@ -166,17 +166,20 @@ public void StartMonitoringNetworkChanges() // Monitor network changes to invalidate Alt-Svc headers. // A weak reference is used to avoid NetworkChange.NetworkAddressChanged keeping a non-disposed connection pool alive. - var poolsRef = new WeakReference>(_pools); - NetworkAddressChangedEventHandler networkChangedDelegate = delegate - { - if (poolsRef.TryGetTarget(out ConcurrentDictionary? pools)) + NetworkAddressChangedEventHandler networkChangedDelegate; + { // scope to avoid closure if _networkChangeCleanup != null + var poolsRef = new WeakReference>(_pools); + networkChangedDelegate = delegate { - foreach (HttpConnectionPool pool in pools.Values) + if (poolsRef.TryGetTarget(out ConcurrentDictionary? pools)) { - pool.OnNetworkChanged(); + foreach (HttpConnectionPool pool in pools.Values) + { + pool.OnNetworkChanged(); + } } - } - }; + }; + } var cleanup = new NetworkChangeCleanup(networkChangedDelegate);