首页 > 解决方案 > NSURLSession 和多线程用于下载多个文件

问题描述

我在 iOS 上有一个想要从我的服务器下载数据的应用程序。数据不过是简单的文本文件。我想并行下载这些文件。如果我应该在一个 nsurlsession 下创建多个 nsurlsession 实例或多个任务(NSURLSessionTasks),我会感到困惑。

我知道 nsurlsession API 是线程安全的。我在这里的基本困惑是关于以下事情:

我的 NsurlsessionConfiguration 将始终保持不变。所以,理想情况下,我可以为每个文件使用相同的 NSURLSession 实例。但是并行创建多个 NSURLSessionTasks 实例有意义吗?或者更好的方法是创建一个新的 NSURLSession 来实现并行性。

我很困惑地理解同一个 NSURLSession 中的每个 NSURLSessionTask 是创建一个新的端点还是被序列化。

标签: iosobjective-c

解决方案


一个包含许多任务的会话——每个请求一个——将同时安全地工作。只要并发性小于HTTPMaximumConnectionsPerHost会话配置的一部分,客户端是跨多个服务器还是向单个服务器发出请求都没有区别。

任务并行运行。(实际上很难在文档中找到这些词明确出现的地方,但这里有很好的暗示)。

请注意,会话配置具有delegateQueue. 基本原理是——因为会话任务是同时运行的——应用程序级别需要序列化处理结果,以免两个并行任务通过委托相互影响。


推荐阅读