我正在使用唯一标识符为后台上传创建NSUrlSession。
在关闭并重新打开该应用程序之后,是否有办法检索该NSUrlSession并在尚未处理上传任务的情况下取消该任务?
我尝试使用相同的标识符简单地重新创建NSUrlSession来检查它是否仍然包含上载任务,但是它甚至不允许我创建该 session ,并抛出诸如“具有标识符...的后台URLSession已经存在”的异常,该异常毫无疑问,因为文档明确指出 session 标识符必须是唯一的。
我正在尝试使用iOS平台项目中的Xamarin.Forms 2.3.4.270进行此操作。
最佳答案
原来我走在正确的轨道上。错误消息“具有标识符...的后台URLSession已经存在”实际上似乎更多是警告,但实际上并没有引发异常(我原来不是来自重复的 session 创建的异常)。
因此,实际上,您可以重新连接到现有的NSUrlSession,即使重新启动应用程序后,仍会发现所包含的任务仍然存在。只需使用相同的标识符创建一个新配置,使用它来创建一个新 session ,忽略打印出来的警告,然后从那里继续。
我不确定是否建议将其用于生产,但是可以满足我的需求。
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();
}
关于c# - 有没有办法检索现有的NSUrlSession/取消其任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47728610/