【问题标题】:How to set different expiration timeout for each NSURLRequest如何为每个 NSURLRequest 设置不同的过期超时
【发布时间】:2016-01-15 03:54:37
【问题描述】:

是否可以为每个请求设置不同的过期超时?

我发现的唯一方法是使用不同的 NSURLSessionConfiguration 创建一个新的 NSURLSession 并更改 timeoutIntervalForResource。像 Alamofire 这样的框架也是如此。

【问题讨论】:

    标签: ios nsurlsession alamofire nsurlsessionconfiguration


    【解决方案1】:

    你绝对可以做到这一点。您可以直接在 NSMutableURLRequest 上设置值,该值可以传递到 Alamofire。

    let URL = NSURL(string: "https://httpbin.org/get")!
    let mutableURLRequest = NSMutableURLRequest(URL: URL)
    mutableURLRequest.timeoutInterval = 5.0
    
    Alamofire.request(mutableURLRequest)
        .responseJSON { response in
            debugPrint(response)
        }
    

    更新

    您无法控制每个请求的timeoutIntervalForResourceNSURLRequest 上的超时间隔属性等同于NSURLSessionConfiguration 上的timeoutIntervalForRequest。更多详情here.

    【讨论】:

    • 如果我没记错的话,timeoutInterval 相当于 NSURLSessionConfiguration timeoutIntervalForResource。是否可以根据请求更改timeoutIntervalForRequest
    • 对不起,我的意思是反过来。 timeoutIntervalForRequest 可以使用 timeoutInterval 为每个请求设置,但 timeoutIntervalForResource 这是我需要的不能
    • 啊,现在。从我从所有文档中可以看出,这是不可能控制每个请求的。我的答案已相应更新。
    • 您始终可以使用计时器字典的外部字典来执行此操作,使用会话和任务标识符作为键,在任务完成时使计时器无效,并在计时器首先触发时取消任务。无论如何,这一直是推荐的方法,因为 NSURLConnection 中的计时器非常古怪。
    【解决方案2】:

    是的,你可以这样做-

    使用此代码

    [[[NSURLSession sharedSession] configuration] setTimeoutForResource:30];
    

    您只需更改不同视图控制器中的 setTimeForResource。

    【讨论】:

    • 但它会影响队列中的所有请求。假设我在队列中有 9 个请求,然后当我添加第 10 个请求时,我更改了超时。此更改将影响所有这些,这是我不想要的
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多