一个 URLSession 中的不同超时
Posted
技术标签:
【中文标题】一个 URLSession 中的不同超时【英文标题】:Different timeouts in one URLSession 【发布时间】:2018-10-04 14:39:39 【问题描述】:是否可以使用一个URLSession
为每个URLRequest
设置不同的超时间隔?
我试着设置
urlRequest.timeoutInterval = 20 * 60
但它已被 URLSession 忽略,并且请求在默认 60 秒后失败并出现超时错误。
仅此设置更改超时:
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 20 * 60 // 20 min
self.session = URLSession(configuration: configuration)
但20 * 60 // 20 min
应用于该会话中的所有URLRequest
。
我想让一些任务等待更长的时间等待响应,但其余任务应该默认在默认 60 秒后失败。
有可能吗?或者我应该使用多个URLSession
PS。在研究过程中,我发现了这个错误: https://bugs.swift.org/browse/SR-2680
【问题讨论】:
你确定它是从 ios 端而不是服务器端失败的吗? 是的,当我在URLSessionConfiguration
上设置 timeoutIntervalForRequest
时,请求等待超过 60 秒
【参考方案1】:
您可以为每个单独的 URL 配置超时。只是不能设置大于 URLSession 配置本身的超时时间。
在某些情况下,此配置中定义的策略可能是 被
NSURLRequest
提供的对象指定的策略覆盖 为一个任务。尊重请求对象上指定的任何策略 除非会话的政策更具限制性。例如,如果 会话配置指定蜂窝网络不应该 允许,NSURLRequest
对象无法请求蜂窝网络。URLSessionConfiguration上的文档
默认超时为 60 秒。您设置为更大的 1200。所以它不起作用。增加您的配置,然后您可以不同地配置每个 url 的超时。
【讨论】:
【参考方案2】:根据 Apple 的文档,不支持在将 URLSession 分配给 URLSession 后修改其属性。您需要单独创建配置并用它初始化一个单独的实例。
【讨论】:
我正在尝试修改URLRequest
属性。 (urlRequest.timeoutInterval = 20 * 60
) 但没有效果以上是关于一个 URLSession 中的不同超时的主要内容,如果未能解决你的问题,请参考以下文章
URLSession dataTaskPublisher 在特定错误延迟后重试