有没有办法检索现有的 NSUrlSession/取消其任务?
Posted
技术标签:
【中文标题】有没有办法检索现有的 NSUrlSession/取消其任务?【英文标题】:Is there a way to retrieve an existing NSUrlSession/cancel its task? 【发布时间】:2017-12-09 12:30:07 【问题描述】:我正在使用唯一标识符为后台上传创建 NSUrlSession。 有没有办法,比如在关闭并重新打开应用程序后,检索该 NSUrlSession 并取消上传任务,以防它尚未处理?
我尝试使用相同的标识符简单地重新创建 NSUrlSession 以检查它是否仍然包含上传任务,但是它甚至不允许我创建此会话,引发异常,例如“带有标识符的后台 URLSession ...已经存在",这并不奇怪,因为文档明确指出会话标识符必须是唯一的。
我正在尝试在 ios 平台项目中使用 Xamarin.Forms 2.3.4.270 执行此操作。
【问题讨论】:
【参考方案1】:事实证明我是在正确的轨道上。错误消息“A background URLSession with identifier ... already exists”实际上似乎更像是一个警告,但实际上并没有抛出异常(我的异常实际上并不是来自重复会话创建)。
因此,您实际上可以重新附加到现有的 NSUrlSession 并且会发现包含的任务仍然存在,即使在重新启动应用程序之后也是如此。只需使用相同的标识符创建一个新配置,使用它来创建一个新会话,忽略打印出的警告,然后从那里继续。
我不确定这是否推荐用于生产,但它可以很好地满足我的需求。
private async Task EnqueueUploadInternal(string uploadId)
NSUrlSessionConfiguration configuration = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration(uploadId);
INSUrlSessionDelegate urlSessionDelegate = (...);
NSUrlSession session = NSUrlSession.FromConfiguration(configuration, urlSessionDelegate, new NSOperationQueue());
NSUrlSessionUploadTask uploadTask = await (...);
uploadTask.Resume();
private async Task CancelUploadInternal(string uploadId)
NSUrlSessionConfiguration configuration = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration(uploadId);
NSUrlSession session = NSUrlSession.FromConfiguration(configuration); // this will print a warning
NSUrlSessionTask[] tasks = await session.GetAllTasksAsync();
foreach (NSUrlSessionTask task in tasks)
task.Cancel();
【讨论】:
以上是关于有没有办法检索现有的 NSUrlSession/取消其任务?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法将现有的 css 解析为 React Native css?