2013-04-15 4 views
0

J'ai implémenté le HttpListener pour traiter les requêtes.Async vs manuel Threadcreation HttpListener

Et maintenant je ne suis pas sûr qu'il est préférable d'utiliser l'implémentation Async sur la mienne.

Le mien quelque chose de similaire à ceci:

while (this.httpListener.IsListening) 
{ 
    processRequest(this.httpListener.GetContext()); 
} 

void processRequest(HttpListenerContext context) 
{ 
    ... 
    ThreadPool.QueueUserWorkItem(.... 
    ... 
} 

Donc en bref, je traiter toutes les demandes dans un seul fil d'abord, puis les séparer, à l'aide ThreadPool.

Y at-il un inconvénient par rapport à la mise en œuvre Async ou est-ce même mauvais?

+1

Cela semble bien si vous ne faites pas quelque chose de chronophage dans le premier '...'. – I4V

+0

Tout ce qui est fait est de créer un peu HandleContainer pour les choses liées à TimeOut. – CSharpie

Répondre

1

Une chose importante à réaliser est que l'utilisation de async ne crée PAS un nouveau thread. Bien sûr, la fonction que vous appelez peut le faire, mais ce n'est pas le cas pour async. Pour les E/S, de nombreuses implémentations Microsoft de méthodes asynchrones utilisent des ports d'achèvement des E/S à un moment donné. Cela signifie qu'ils sont rappelés à partir d'un seul thread dédié géré par le système d'exploitation plutôt que de devoir créer un nouveau thread juste pour attendre quelques E/S.

Il s'agit d'une approche beaucoup mieux, en particulier pour les serveurs qui peuvent avoir beaucoup de demandes entrantes. Chaque thread a un énorme frais généraux.

Par conséquent, je vous recommande d'utiliser l'implémentation async lorsque cela est possible.

+0

Eh bien, l'approche est destinée aux services à petite échelle, je ne sais pas ce que vous définissez beaucoup, mais je suppose que nous disons 16 n'est pas. – CSharpie

+0

Serait-il mauvais d'implémenter la méthode asynchrone et d'utiliser processRequest? – CSharpie

+1

Je ne suis pas sûr de ce que vous voulez dire ... Ce serait bien d'avoir le processRequest() en utilisant l'approche Async cependant. –