2010-10-14 4 views
3

Existe-t-il un moyen d'annuler un système asynchrone. Threading.Tasks.Task? à savoirUtilisation de l'annulation avec des tâches asynchrones

Task.Factory.FromAsync(
    client.BeginCallWebService, 
    client.EndCallWebService, 
    "param1", 
    null); 

Je voudrais enregistrer un CancellationToken partagé avec cette tâche de sorte que si le jeton est annulé avant cette tâche Async est invoquée, il ne sera pas invoquée.

Merci

+3

J'ai révulsés la question à la version originale. Les modifications récentes l'ont fait dévier de l'intention initiale du PO, et incompatible avec leur réponse acceptée. – Douglas

Répondre

2

Ainsi, après avoir mis un peu plus pensé à ce que je pense que l'annulation d'une tâche Async n'a pas de sens que la partie Begin sera appelée « ligne » qui est tout de suite sur le thread appelant.

Par conséquent, il n'est pas nécessaire de prendre en charge l'annulation de cette manière.

Si vous vouliez abandonner effectivement un appel de traitement (par exemple à un service Web ou en utilisant le client Web), vous pouvez mettre en œuvre une approche TaskCompletionSource à la place comme l'indique ici: http://msdn.microsoft.com/en-us/library/ee622454.aspx

Désolé pour répondre à ma question, je suis deviner que c'est un peu non-non.

0

Je ne suis pas d'accord avec l'idée que l'annulation d'une tâche asynchrone n'a aucun sens.

Vous avez raison, cela serait normalement appelé immédiatement (et une tâche chaude est renvoyée) mais ce n'est pas toujours le cas, par exemple lorsque vous utilisez une TaskFactory qui utilise un OrderedTaskScheduler (une classe exécute une tâche après un autre). OrderedTaskScheduler est contenue dans http://archive.msdn.microsoft.com/ParExtSamples/Release/ProjectReleases.aspx?ReleaseId=4179

Prenez soin, Martin

Questions connexes