2013-01-21 5 views
0

Je voudrais expérimenter un peu avec ces nouveaux mots-clés introduits dans C# 5. Je suis intéressé à regarder comment distribuer le travail de manière concomitante. Je le ferais plus naturellement avec un pool de threads mais j'étais intéressé à faire de même avec ce nouveau pattern asynchrone. Donc voici mon exemple de jouet, j'écris un robot qui va explorer à partir de n sites racines et suivre le lien plus bas. Existe-t-il un bon modèle de concurrence pour écrire cette application.Utiliser le modèle async/await pour télécharger plusieurs documents

+0

Il y a beaucoup d'articles sur Internet sur exactement cet exemple, avez-vous essayé de les regarder? – svick

+0

Voulez-vous en repérer un. Je n'en ai pas vraiment trouvé un là-dessus. Une chose à noter est qu'il ne s'agit pas d'un pool de threads ou async/wait il s'agit d'utiliser les deux en même temps – Dave

+0

@Dave: Quel est le bénéfice du pool de threads ici? Comment voulez-vous l'utiliser? –

Répondre

1

Indépendamment de la technologie de filetage utilisée, vous avez besoin d'un responsable pour distribuer la charge de travail aux travailleurs individuels. Le gestionnaire créera le numéro 1-N des processus de travail. Dans les processus de travail, ils feront la méthodologie de threading cible que vous choisissez.

Je vous recommande de créer une interface à laquelle chacun de ces travailleurs devra adhérer et au sein de l'interface, il spécifie une méthode de démarrage qui prend l'url, une éventuelle erreur conditions qui sont publiques et peuvent être vérifiées, la possibilité de arrêter le processus et un moyen de transmettre des données lorsque le travail est terminé en supposant aucune erreur. Enfin un statut tel que enum, pour savoir s'il fonctionne actuellement ou arrêté ou arrêté avec des erreurs.

Ensuite, le gestionnaire peut simplement créer chaque processus en transmettant l'URL cible et en plaçant l'unité de travail dans sa propre file d'attente interne. Le gestionnaire parcourt ensuite la file d'attente à la recherche d'éléments qui se marquent comme étant terminés, puis transmet les données à une interface graphique (?) Pour les montrer à l'utilisateur final.

Alors, comment ce nouveau modèle d'attente asynchrone s'adaptera-t-il? Vous effectuez simplement l'appel en utilisant async await dans votre classe de worker et traitez les données si nécessaire. Le gestionnaire n'a pas besoin de savoir car la classe communique avec le gestionnaire via les méthodes d'interface.

Voici quelques documents pour vous lancer sur le async vous attendent modèle:

The Task-Based Async Await Pattern (téléchargement mot) par Stephen Toub

Asynchronous Programming with Async and Await (C# and Visual Basic)

Questions connexes