8
votes

Silverlight WCF Proxy ASYNC uniquement?

Pourquoi l'offre de la classe de proxy WCF générée par Silerlight n'affiche que des appels ASYNC?

Il y a des cas où je n'ai pas vraiment besoin du motif async (par exemple dans un travailleur d'arrière-plan)

Edit: Parfois, j'ai besoin de traiter les résultats de deux appels de WCF. Cela aurait été beaucoup plus simple si j'avais pu attendre (les affaires de l'application le permettent) pour les deux appels à la fin, puis à traiter .. mais NOOOO ... ASYNC! : P


0 commentaires

3 Réponses :


7
votes

Si je comprends bien, l'objectif ici est de rendre difficile la tâche des gens (Sync. Io de l'interface utilisateur). Si vous utilisez les classes de la WCF, vous devrez probablement vivre avec elle.


4 commentaires

+1 Empêcher le devir Silverlight Devenir de se tirer trop sur le pied, trop mal :-)


Silverlight ne vous permet que de faire des appels réseau sur le thread de l'interface utilisateur (pas sûr que cela puisse être une restriction de navigateur également). Par conséquent, Sync io enfermerait le navigateur, mauvaise chose.


"Empêchez le devir Silverlight de se tirer dans le pied"; Maintenant, je dois attendre 4 demandes asynchronisées pour rassembler des données et le présenter et je ne peux pas me tirer dessus dans le pied. Le runtime m'a tiré sur le pied. Pratique..


Vous (ou plutôt votre utilisateur) doit les attendre de toute façon. Comment exactement le temps d'exécution vous a offensé?



6
votes

Il y a en fait une raison technique que vous ne pouvez pas faire des appels de synchronisation, au moins à partir du thread de navigateur "principal", qui est que le navigateur invoque tous les appels d'API enfichables sur le même thread, alors si SL devait bloquer Ce fil en attendant le rappel réseau, le rappel du réseau ne réussirait pas et l'application serait une impasse. Cela dit, l'API de synchronisation fonctionnerait bien si l'application est initiée à partir d'un fil différent - c'est-à-dire si l'application est d'abord une queueUserErworkItem pour sortir du thread du navigateur - mais nous avons senti que cela serait déroutant d'offrir l'option de synchronisation et de l'avoir uniquement travailler une partie du temps.


1 commentaires

Il est dommage qu'il ne puisse pas y avoir une API de synchronisation qui jette une exception utile (par exemple. Cette fonction est synchrone, elle ne peut donc être appelée que par des threads non-UI ») lorsqu'il est appelé à partir d'un fil d'interface utilisateur.



0
votes

Andrei, il y a Emethods qui utilise même le modèle ASYNC, vous permet d'écrire un code expressif, d'esasy à lire et d'entretien, sans devenir fous Watings 4 demandes asynchronisées, en simplifiant simplement la façon dont vous écrivez votre code. Donnez un coup d'œil à cette bibliothèque http://syncwcf.codeplex.com/


0 commentaires