SignalR et client WinRT: n’appelez pas Wait () au démarrage ()

J’ai une question concernant la documentation officielle de SignalR – Guide de l’API Hubs – .NET Client . Dans la section – Comment établir une connexion . Il a été écrit la chose suivante:

La méthode Start s’exécute de manière asynchrone. Pour vous assurer que les lignes de code suivantes ne s’exécutent pas après l’établissement de la connexion, utilisez wait dans une méthode asynchrone ASP.NET 4.5 ou .Wait () dans une méthode synchrone. N’utilisez pas .Wait () dans un client WinRT.

Est-ce que quelqu’un sait quelle est la raison spécifique pour ne pas appeler Wait ()? En outre, cela s’applique-t-il également lorsque j’ai un client WinRT dans lequel j’ai un appel avec hubProxy.Invoke() au serveur?

Merci de votre aide!

Du commentaire:

Rien n’est mentionné en ce qui concerne le code asynchrone ou synchrone. Le code WinRT est-il asynchrone par défaut ou y a-t-il autre chose que je ne connais pas ou que je ne comprends pas?

Dans une application d’interface utilisateur côté client (y compris WinRT), il existe au moins deux raisons de ne pas bloquer:

  • évitez de bloquer l’interface utilisateur et de la maintenir fluide;
  • éviter les blocages décrits dans le blog de Stephen Cleary , dans les cas où il y a une await dans la chaîne d’appels en cours, dans le cadre de stack supérieur;

Ce dernier point est particulièrement important pour WinRT, où l’asynchronisme est omniprésent. L’ensemble de la structure WinRT a été conçu pour être “asynchrone” , il est donc très probable que vous créiez un blocage si vous task.Wait ou task.Result n’importe où sur le thread d’interface utilisateur.

Pour une application ASP.NET côté serveur, il existe au moins deux raisons de ne pas bloquer:

  • le blocage rend votre application Web moins évolutive, car le thread bloqué pourrait servir d’autres requêtes HTTP entrantes.
  • le même scénario de blocage.

Vous voudrez peut-être consulter la liste des liens dans le wiki async-await wait pour plus de lecture.