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:
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:
Vous voudrez peut-être consulter la liste des liens dans le wiki async-await
wait pour plus de lecture.