2010-07-07 9 views
5

J'ai essayé de comprendre comment utiliser System.Threading.Tasks pour invoquer de façon asynchrone une méthode WCF synchrone tout en prenant en charge l'annulation, la gestion des erreurs, le retour de résultat et les continuations multiples.Besoin d'un exemple C# System.Threading.Tasks complet

J'ai rencontré un certain nombre de démos incomplètes, mais elles semblent toutes être un peu courtes. À titre d'exemple, je ne peux pas utiliser l'annulation coopérative puisque toutes mes méthodes WCF sont atomiques et relativement longues.

+1

Les tâches requièrent un support asynchrone intrusif dans votre code cible (personnalisé ou non) pour activer toutes ces fonctions, en particulier l'annulation. Vous pouvez créer une méthode synchrone à partir d'une méthode asynchrone, mais vous ne pouvez pas le faire dans l'autre sens sans modifier (éventuellement refactoriser) le code. –

Répondre

1

Je considère une autre option - générer l'interface client WCF avec des méthodes asynchrones. Cela vous permettra d'effectuer tous les appels de service WCF de manière asynchrone (du point de vue de l'application cliente), ce qui vous permettra de prendre en charge l'annulation, la gestion des erreurs, le retour résultat, etc ...

L'avantage est que vous avez gagné t bloquer un thread sur le pool de threads de travail (comme le fera System.Threading.Tasks), et vous n'avez pas à vous soucier de savoir comment annuler un appel WCF synchrone dans votre thread de travail.

Y a-t-il une raison pour laquelle vous devez effectuer un appel WCF synchrone?

+0

Merci pour votre réponse rapide. Malheureusement, j'utilise un proxy personnalisé, donc je ne peux pas utiliser l'async WCF natif ... –

1

Si vous avez expliqué ce que vous faites un peu plus, cela pourrait vous aider.

Cependant, vous semblez dire que vous voulez une version asynchrone d'un appel synchrone et ce n'est pas ce que Tâches veut dire.

Le traitement basé sur les tâches consiste à faire ressembler un appel asynchrone à un appel synchrone. Ne pas agir comme si le code ressemblait à ça, c'est comme ça que ça fonctionne.

Questions connexes