2013-06-26 1 views
1

Si je suis sur un thread qui n'a pas besoin d'être réactif et pour lequel l'exécution continue dépend du résultat d'un appel lié d'E/S (demande HttpClient) , est-il utile d'implémenter l'appel de manière asynchrone dans .NET? Est-ce que Windows sait que j'attends une opération d'E/S et que je m'abstiens de programmer le thread jusqu'à l'arrivée des données? Je me souviens d'avoir lu quelque part que c'était le cas, mais je crains de toujours avoir de la difficulté à comprendre comment cela fonctionne et quand je peux compter dessus.Planification des opérations liées aux E/S dans .NET

+0

Note: Je pense que les inconvénients possibles peuvent être des vérifications d'agrégats, des frais généraux, etc. – Sprague

+0

J'ai sélectionné une réponse mais je suis toujours intéressé de savoir si quelqu'un peut expliquer un peu comment le Le système d'exploitation et l'interface de ligne de commande fonctionnent ensemble pour éviter la planification de threads en attente d'E/S, et ils vont augmenter un commentaire qui peut confirmer positivement les détails. – Sprague

Répondre

2

Non, il n'y a pas de valeur pour utiliser async. Comme vous le supposez, Windows saura que le thread attend les E/S et ne planifiera pas le thread avant l'arrivée des données. Cependant, l'idée d'async est que vous n'avez pas vraiment besoin de créer un nouveau thread. L'idée d'async est que (je coupe quelques coins ici, il y a une meilleure documentation disponible sur Internet) il essaie de faire quelque chose comme vous le faites ici manuellement. Donc, au lieu de devoir créer un nouveau thread, async le fait pour vous. (Il ne crée pas réellement un nouveau fil, mais vous obtenez l'idée.)

Si cela doit être de haute performance, je ne conseillerais pas de le faire de la façon dont vous l'implémentez maintenant. Async serait beaucoup mieux pour ça. Dans votre cas, lorsque vous faites 1000 requêtes, vous avez 1000 threads, ce qui n'est pas une bonne idée. Async rendrait cela beaucoup plus intelligent et vous donnerait de meilleures performances. L'avantage fondamental de l'utilisation d'async (en dehors de la performance) est que c'est comme si vous programmiez réellement seulement sur le fil d'interface utilisateur. Auparavant, cela aurait bloqué votre application, mais avec async votre application reste réactive. C'est vraiment le principal avantage d'async.

+0

Dans ce cas, je ne ferme pas le thread manuellement, il provient d'IIS ou du framework que nous utilisons par dessus IIS. Donc, je pense que cela ne sera pas préoccupant. – Sprague

+0

Que vous êtes probablement bien. En outre, async ne fonctionnerait probablement pas (du moins pas comme vous l'attendez) car il est plus destiné aux applications Windows/WPF/Metro. –

Questions connexes