我需要将 urlsession 数据任务放在另一个 DispatchQueue 上还是自动完成?
Posted
技术标签:
【中文标题】我需要将 urlsession 数据任务放在另一个 DispatchQueue 上还是自动完成?【英文标题】:Do I need place urlsession datatask on another DispatchQueue or it's done automatically? 【发布时间】:2022-01-21 08:50:15 【问题描述】:之前没有任何使用数据任务和 urlsessions 的经验。所以我很好奇。案例是 - 试图拥有一个无限滚动的表格。当这个方法被调用时
tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath])
来自 UITableViewDataSourcePrefetching 并在检查至少一个索引路径的行大于当前最大项目后 - 我开始使用 urlsession 数据任务加载新数据。问题是 - 我需要做类似的事情
let queue = DispatchQueue.gloabl(qos: .userInteractive)
queue.async
myTaskGoesHere
【问题讨论】:
【参考方案1】:URLSession 数据任务总是在后台线程上运行。因此,您必须在完成处理程序闭包中切换到主队列才能更新用户界面。因为数据任务的答案是在 ios 启动任务的同一线程上传递的。
顺便说一句,.userInteractive
也在主线程上运行。来自文档:
用户交互任务在系统中具有最高优先级。将此类用于与用户交互或主动更新应用程序用户界面的任务或队列。例如,将其用于动画类或交互式跟踪事件。
【讨论】:
以上是关于我需要将 urlsession 数据任务放在另一个 DispatchQueue 上还是自动完成?的主要内容,如果未能解决你的问题,请参考以下文章
Swift UrlSession 在 UrlSession 中不起作用
Swift 3,未调用 URLSession 数据任务完成处理程序
NSURLSessionTaskDelegate 方法 URLSession:task:didCompleteWithError: 从不调用