diff --git a/src/Foundation/NSUrlSessionHandler.cs b/src/Foundation/NSUrlSessionHandler.cs index d763664a08fb..2c0af8202220 100644 --- a/src/Foundation/NSUrlSessionHandler.cs +++ b/src/Foundation/NSUrlSessionHandler.cs @@ -176,10 +176,9 @@ public NSUrlSessionHandler (NSUrlSessionConfiguration configuration) void RemoveInflightData (NSUrlSessionTask task, bool cancel = true) { lock (inflightRequestsLock) { - if (inflightRequests.TryGetValue (task, out var data)) { + if (inflightRequests.Remove (task, out var data)) { if (cancel) data.CancellationTokenSource.Cancel (); - inflightRequests.Remove (task); } } @@ -192,14 +191,16 @@ void RemoveInflightData (NSUrlSessionTask task, bool cancel = true) /// protected override void Dispose (bool disposing) { + var tasks = new List (); lock (inflightRequestsLock) { - foreach (var pair in inflightRequests) { - pair.Key?.Cancel (); - pair.Key?.Dispose (); - } - + tasks.AddRange (inflightRequests.Keys); inflightRequests.Clear (); } + foreach (var task in tasks) { + task.Cancel (); + task.Dispose (); + } + session.InvalidateAndCancel (); base.Dispose (disposing); }