9
votes

Comment exécuter des opérations asynchrones séquentielles?

Maintenant, j'utilise quelque chose de Simmilar à cette construction xxx

et pas très heureux avec elle. Existe-t-il un moyen meilleur et plus propre de faire un tel type d'exécution d'actions séquentes / simultanées?

Je consulte RX Cadre, mais il est conçu pour d'autres tâches et ressemble à une autre solution pour mon problème.


1 commentaires

Vous pouvez également consulter le code source SignalR pour des trucs comme à ce moment-là, attraper une utilisation fluide.


5 Réponses :


1
votes

Ce n'est pas beaucoup em> Nettoyant, mais vous pourriez avoir un coup d'oeil à Backworker code>.

BackgroundWorker A = new BackgroundWorker();
A.DoWork += (s, e) => AMethod();
A.RunWorkerCompleted += (s, e) => BMethod();

BackgroundWorker B = new BackgroundWorker();
B.RunWorkerCompleted += (s, e) => CMethod();

//etc


2 commentaires

Soyez très prudent avec cela. Je recommande généralement d'éviter les threads de gérer le flux de programme ASYNC. Il y a de meilleures constructions que de threads pour organiser le code. La complexité de la lisibilité et de l'exécution du code ne valent pas la peine.


Quelles constructions sont là que vous recommandez ??



4
votes

Regardez sur réactiveUI . Il est basé sur Rx et simplifiera votre code beaucoup. Voici un exemple: Appeler des services Web en Silverlight à l'aide de ReactiveXAML


0 commentaires

8
votes

Il n'est pas nécessaire de nier la configuration des événements terminés, à moins que quelqu'un puisse réellement appeler B ou C avant la fin des Si vous le séparez, voici ce à quoi il ressemble:

A.Completed += () => { B(); };
B.Completed += () => { C(); };  
C.Completed += () => { //   }; 

A();


0 commentaires

2
votes

Vous pouvez regarder TPL. Vous pouvez écrire du code comme dans ce fil: lien


0 commentaires

1
votes

attendre le C # 5.0 et utilisez le nouveau async et attendre mots-clés.

Voici quelques liens préliminaires à ce sujet:


2 commentaires

Avoir le même remplissage. Toute mise en œuvre avec des positions linguistiques actuelles obscurcit le code. J'espère que le C # 5 sera publié bientôt.


En attendant, ce n'est pas une réponse sérieuse.