Je travaille sur une application qui prend quelques minutes pour télécharger un gros fichier et l'écrire sur le disque. Le client m'a informé qu'il souhaite pouvoir l'annuler à tout moment. Ce que j'ai fait est encapsuler un URLSession
global qui s'occupera de la tâche de téléchargement. Après la saisie de l'utilisateur, je vais appeler invalidateAndCancel()
sur la session. J'ai trouvé que la méthodeURLSessionDownloadTask: Annuler l'écriture de données
urlSession(_ session: URLSession,
downloadTask: URLSessionDownloadTask,
didWriteData bytesWritten: Int64,
totalBytesWritten: Int64,
totalBytesExpectedToWrite: Int64)
ne cesse pas d'être appelé, même après la session a été invalidée et annulée.
QUESTION
Comment j'obtenir cette méthode pour arrêter l'exécution?
Umm ... non. La méthode 'invalidateAndCancel' annule toutes les tâches dans une session donnée (d'où« cancel »). Selon la documentation, vous ne devriez * jamais * recevoir d'appels de délégués supplémentaires après avoir appelé cette méthode (ou au plus quelques millisecondes après pour tenir compte du multithreading). Si ce n'est pas ce que vous voyez, alors soit vous n'annulez pas la bonne session, votre tâche n'est pas dans cette session, ou vous avez trouvé un bogue très sérieux. – dgatwood