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);
}