J'ai une classe Uploader
avec une méthode - Upload
Annulation tâche de téléchargement async
public static int Upload(string endpoint,object objectToBeUploaded)
{
Source.Token.ThrowIfCancellationRequested();
var repos = new UploadRepository(endpoint);
return repos.Upload(objectToBeUploaded);
}
Le Source
est un CancellationTokenSource
statique disponible dans le projet.
J'ai aussi une liste de points de terminaison dont j'ai besoin de télécharger un certain object
pour.
Le code dans le Form
(c'est un très petit projet en utilisant WinForms
) ressemble à ceci:
private async Task UploadObjectAsync(
string endpoint,
object objectToBeUploaded)
{
try
{
int elementId = await Task.Factory.StartNew(
() => Uploader.Upload(endpoint,objectToBeUploaded));
//do something with the returned value..
}
catch(OperationCanceledEception ex)
{
//handle the exception..
}
}
Et puis je mets le gestionnaire btnUpload.Click
comme celui-ci, je peux donc utiliser plus tard:
this.btnUpload.Click += async (s, e) =>
{
foreach(var endpoint in endpoints)
{
await UploadObjectASsync(endpoint,someObject);
}
}
Le problème est que chaque fois que je commence à télécharger à tous les points de terminaison (comment ils sont obtenus est sans importance) et je décide d'annuler le processus de téléchargement en utilisant Source.Cancel();
le premier UploadObjectAsync
sera alwa ys passent par la vérification Source.Token.ThrowIfCancellationRequested();
dans la méthode Upload
a déjà été passée. Le reste des tâches sera annulé normalement et géré avec élégance.
Comment est-ce que je peux restructurer ce code afin de m'assurer que le premier UploadObjectAsync
Task
sera également annulé?
Il est à noter que je n'ai également pas accès au code source du processus de téléchargement lui-même (référence de service) - le repos.Upload(objectToBeUploaded)
dans ma méthode Upload
.
Il est à noter que ce n'est pas vraiment conseillé. –
Ouais ... mais interrompre le fil devrait être relativement sûr. – Nitram
Oui. Le code de téléchargement doit toujours être changé. Bien que ce soit hors de son contrôle, alors ce serait le chemin à parcourir. –