IHttpActionResult vs async Task & lt; IHttpActionResult & gt;
La plupart des API Web 2.0 méthodes que j'ai vu de retour IHttpActionResult
qui est définie comme une interface qui "définit une commande de manière asynchrone crée un Système.Net.Http.HttpResponseMessage".
Je suis un peu confus au sujet de ce qui se passe quand une méthode est de retour async Task<IHttpActionResult>
.
Pourquoi voudriez-vous utiliser un sur l'autre? Ou sont ces fonctionnellement identiques - n'est-ce pas IHttpActionResult
déjà asynchrone?
source d'informationauteur alex
Vous devez vous connecter pour publier un commentaire.
La différence entre l'utilisation de
IHttpActionResult
etasync Task<IHttpActionResult>
est si votre code utilise laasync
etawait
fonctionnalité. De nombreuses bibliothèques comme Entity Framework fournirasync
versions de méthodes (par exempleSaveChangesAsync
) qui fournissent une légère augmentation de la performance. Cependant, il ya des pièges à l'aide deasync
avec l'API Web, de sorte que si vous comprenez de nombreuses particularités, il est prudent de s'en tenir à l'API synchrones.Steven Cleary a beaucoup d'informations sur son blog sur les particularités de
async
etawait
. Pour commencer je vous conseille de regarder Ne bloquez pas sur async code.Votre action peut retourner une
IHttpActionResult
qui effectue l'action de manière asynchrone quand le cadre des appels de sesExecuteAsync
.Mais si vous devez d'abord faire quelques autres appels asynchrones avant de créer et de retourner le résultat, alors vous êtes obligés de changer la signature de
async Task<IHttpActionResult>
. C'est tout ce qu'il est.Si votre contrôleur de code n'utilise pas
await
ensuite, vous pouvez revenir à la simple signature. Cependant, le résultat de votre retour sera encore asynchrone.Pour être clair, dans les deux cas, vous utilisez le code asynchrone.
L'avantage de performance est celle - ci, à condition que tous les appels au niveau le plus profond sont asynchrones - un serveur web de thread n'est pas bloqué pendant disque ou sur le réseau I/O, votre serveur peut traiter plus de demandes avec moins de ressources.
Réfléchir soigneusement avant d'appeler
Wait
ouResult
sur une Tâche, ou la création d'une Tâche à l'intérieur de vous-même ASP.NET code.Deux raisons légitimes à la main le code, intentionnelle multi-threading ou le parallélisme de du serveur web de code sont: