26 items
Retry Loop Swallows Cancellation
Code QuizResilient HTTP Retries and Backoff
QuizNetwork Reliability: Retries, Timeouts & Connectivity
Slides / VideoNetwork Reliability Basics
FlashcardResilient HTTP on Flaky Networks
Slides / VideoResilient HTTP on Flaky Networks
FlashcardAuth Header and Flaky Connection Config
Code QuizAuth Tokens & Timeouts in URLSession
QuizURLSession Fetch With Loading State
Code QuizHandling Loading and Error States in URLSession
QuizAuth Tokens & Resilient Networking
Slides / VideoURLSession Requests & Loading States
Slides / VideoAuth Tokens & Resilient Requests
FlashcardURLSession Requests & Loading/Error States
FlashcardHandling URLSession Errors Safely
Code QuizDetecting Network Failures
QuizFetching JSON with URLSession
Code QuizChecking HTTP Status Codes
QuizLoading, Errors & Flaky Networks
Slides / VideoREST APIs with URLSession Basics
Slides / VideoHandling Loading, Errors & Flaky Networks
FlashcardREST Requests with URLSession
FlashcardURLSession Errors & Retry Resilience
Slides / VideoREST Calls with URLSession & Async
Slides / VideoHandling Network Errors & Retries
FlashcardREST Calls & Async Responses in URLSession
FlashcardRetry Loop Swallows Cancellation
A retry helper keeps hammering the network even after its task is cancelled.
func fetchWithRetry(from url: URL) async throws -> Data {
var attempt = 0
while true {
do {
let (data, _) = try await URLSession.shared.data(from: url)
return data
} catch {
attempt += 1
if attempt >= 3 { throw error }
// back off before trying again
Thread.sleep(forTimeInterval: 1.0)
}
}
}This retry loop is supposed to stop immediately if its Task is cancelled, but it doesn't. What is the bug?