c# - 有没有办法检索现有的NSUrlSession/取消其任务?

标签 c# ios xamarin.forms

我正在使用唯一标识符为后台上传创建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/

相关文章:

xamarin.forms - 用项目名称替换 $safeprojectname$ 不起作用

c# - 如何手动查找仅由 DataType 而不是 key 定义的 DataTemplate?

c# - 触摸 WPF 中的 Bug?

ios - swift Alamofire : How to validate both a valid request and a valid response code

xamarin - 使用隐藏在 Xamarin.Forms 中的 C# 代码访问控件

c# - 在 Xamarin Forms 中旋转的 360 度图像

c# - 使用 Caliburn Micro 和 Silverlight 从文件服务器加载图像

c# - 在 C# 中合并多个列表

ios - 模型类数据快速访问所有 View Controller

ios - 点击按钮时重复播放声音