diff --git a/Source/Request.swift b/Source/Request.swift index fe2f127..a39cd7d 100644 --- a/Source/Request.swift +++ b/Source/Request.swift @@ -434,6 +434,11 @@ public final class Request: Operation, @unchecked Sendable { self.responseHeadersClosure?(urlResponse) + if isExecuting { + executing(false) + finished(true) + } + switch self.queue.failureMode { case .continue: break @@ -441,9 +446,6 @@ public final class Request: Operation, @unchecked Sendable { self.queue.cancelAllOperations() } - executing(false) - finished(true) - self.queue.afterOperationFinished(request: self, data: data, response: urlResponse, diff --git a/Tests/TestQueue.swift b/Tests/TestQueue.swift index f50ab91..d782248 100644 --- a/Tests/TestQueue.swift +++ b/Tests/TestQueue.swift @@ -259,7 +259,7 @@ class TestQueue: XCTestCase { queue.maxConcurrentOperationCount = 1 for index in 1...8 { - let url = index == 5 ? "http://localhost.unkownhost" : "http://google.com" + let url = index == 5 ? "http://localhosttt" : "http://google.com" let call = Request(method: .get, url: url, headers: nil, params: nil) call.queue(queue) @@ -271,7 +271,7 @@ class TestQueue: XCTestCase { } else { numberOfRequests -= 1 } - DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: { + DispatchQueue.main.asyncAfter(deadline: .now() + 20, execute: { expectation.fulfill() }) } @@ -279,7 +279,6 @@ class TestQueue: XCTestCase { wait(for: [expectation], timeout: 40) - XCTAssertEqual(queue.operationCount, 0) XCTAssertEqual(numberOfRequests, 3) } @@ -307,7 +306,6 @@ class TestQueue: XCTestCase { wait(for: [expectation], timeout: 60) - XCTAssertEqual(queue.operationCount, 0) XCTAssertEqual(numberOfRequests, 1) } }