Est-il prudent d’utiliser async / wait dans les gestionnaires d’événements ASP.NET?

Je faisais du codage dans ASP.NET quand je suis tombé sur ceci:

protected async void someButtonClickHandler(...) { if(await blah) doSomething(); else doSomethingElse(); } 

Après avoir posé cette question, je comprenais mieux comment fonctionne async / await . Mais ensuite, il m’a frappé de savoir si l’on peut utiliser async / await de la manière indiquée ci-dessus.
Je veux dire qu’après l’appel await blah l’appelant continue l’exécution. Ce qui signifie que la réponse au client pourrait être renvoyée avant await blah terminé. Est-ce correct? Et si tel est le cas, que se passe-t- doSomething() / doSomethingElse() . Seront-ils jamais exécutés? S’ils sont exécutés, l’utilisateur voit-il les effets de leurs modifications?
Dans mon cas, ces méthodes changent certaines données affichées à l’utilisateur, mais j’aimerais aussi savoir ce qui se passerait dans le cas général.

Oui, c’est sûr, mais pas vraiment recommandé. La méthode recommandée pour ce faire consiste à utiliser RegisterAsyncTask . Cependant, ASP.NET (Web Forms) gérera correctement les gestionnaires d’événements async void .

La réponse n’est pas rendue au client lorsque le gestionnaire await s; L’ await ne produit que le runtime ASP.NET, pas le client. Le moteur d’exécution ASP.NET est conscient que le gestionnaire d’événements n’est pas terminé. Il sait donc ne pas envoyer la réponse. Lorsque le gestionnaire d’événements est terminé, le moteur d’exécution ASP.NET répond en envoyant la réponse à ce moment.

J’ai un article MSDN sur ASP.NET asynchrone que vous pouvez trouver utile. Si vous êtes curieux de savoir comment le runtime ASP.NET sait que le gestionnaire async n’a pas abouti, je le résume dans un article précédent de MSDN .