Hay dos significados diferentes en la definición de "tiempo de espera" aquí.
Tiempo de espera como en timeoutInterval
Desea descartar una solicitud cuando esté inactiva (no más transferencia) durante más de un intervalo de tiempo arbitrario. Ejemplo: establecestimeoutInterval
en 10 segundos, inicia su solicitud a las 12:00:00, puede transferir algunos datos hasta las 12:00:23, luego la conexión expirará a las 12:00:33. Este caso está cubierto por casi todas las respuestas aquí (incluidas JosephH, Mostafa Abdellateef, Cornelius y Gurpartap Singh).
Tiempo de espera como en timeoutDeadline
Desea descartar una solicitud cuando llega a una fecha límite que ocurre arbitrariamente más tarde. Ejemplo: establece deadline
10 segundos en el futuro, inicia su solicitud a las 12:00:00, puede intentar transferir algunos datos hasta las 12:00:23, pero la conexión se agotará antes a las 12:00:10. Este caso está cubierto por borisdiakur.
Me gustaría mostrar cómo implementar esta fecha límite en Swift (3 y 4) para AFNetworking 3.1.
let sessionManager = AFHTTPSessionManager(baseURL: baseURL)
let request = sessionManager.post(endPoint, parameters: parameters, progress: { ... }, success: { ... }, failure: { ... })
DispatchQueue.global().asyncAfter(deadline: .now() + 10.0) {
request?.cancel()
}
Y para dar un ejemplo comprobable, este código debería imprimir "falla" en lugar de "éxito" debido al tiempo de espera inmediato de 0.0 segundos en el futuro:
let sessionManager = AFHTTPSessionManager(baseURL: URL(string: "https://example.com"))
sessionManager.responseSerializer = AFHTTPResponseSerializer()
let request = sessionManager.get("/", parameters: nil, progress: nil, success: { _ in
print("success")
}, failure: { _ in
print("failure")
})
DispatchQueue.global().asyncAfter(deadline: .now() + 0.0) {
request?.cancel()
}
performSelector:afterDelay:...
para cancelar manualmente las operaciones existentes. Consulte mi respuesta para obtener más detalles.