Xamarin iOS:BackgroundTask,是否需要将任务对象设置为无效

Xamarin iOS:BackgroundTask,是否需要将任务对象设置为无效,ios,xamarin,task,background-task,Ios,Xamarin,Task,Background Task,我正在使用后台任务。任务工作正常,但在某个点将强制关闭。我有一个测试应用程序,整个下午都保持打开状态,如果我删除代码中的后台任务,崩溃就不会发生 仔细查看后,可能缺少一行代码来指定任务对象无效 var siteId = Settings.CurrentSiteId; if (siteId > 0 && !(new EntityBLL().IsInitial(siteId))) { var task = nint.Min

我正在使用后台任务。任务工作正常,但在某个点将强制关闭。我有一个测试应用程序,整个下午都保持打开状态,如果我删除代码中的后台任务,崩溃就不会发生

仔细查看后,可能缺少一行代码来指定任务对象无效

var siteId = Settings.CurrentSiteId;
        if (siteId > 0 && !(new EntityBLL().IsInitial(siteId)))
        {
            var task = nint.MinValue;
            task = UIApplication.SharedApplication.BeginBackgroundTask("bgEntityDownload", () =>
            {
                ServerEntity.TerminateAutoDownload(true);
                UIApplication.SharedApplication.EndBackgroundTask(task);
                task = UIApplication.BackgroundTaskInvalid;

                completionHandler?.Invoke(UIBackgroundFetchResult.NewData);
            });

            AppLogger.Instance.AddLog(AppLogLevel.Information,
                                      nameof(TimerDownload),
                                      nameof(DownloadEntityFromServer),
                                      "Background download starts", "");

            var result = await ServerEntity.AutoDownload(siteId);
            UIApplication.SharedApplication.EndBackgroundTask(task);
            task = UIApplication.BackgroundTaskInvalid;

            completionHandler?.Invoke(UIBackgroundFetchResult.NewData);
        }
这里的台词是:

var result = await ServerEntity.AutoDownload(siteId);
            UIApplication.SharedApplication.EndBackgroundTask(task);
            task = UIApplication.BackgroundTaskInvalid;

task=uiapplication.BackgroundTaskInvalid是工作完成后所必需的。这不是必需的,但这是一种良好的做法,允许系统将其资源用于不同的流程。您的后台任务将在180秒后强制终止

它不是“必需的”。您可以使用该值作为哨兵,以便在代码的其他地方知道后台任务已经结束。在Xcode下运行时,后台执行时间是无限的。正常运行时,应用程序在终止前只有180秒的后台时间。