J'ai quelques méthodes hubProxy.Invoke("Method", param)
qui s'exécutent de manière asynchrone. Ils appellent tous la même méthode mais avec des arguments différents. Le problème est que tous s'exécutent correctement sur certains PC mais qu'un autre est confronté au problème que seul l'appel de la première méthode est exécuté alors que d'autres s'exécutent pour toujours. méthode ressembleConcentrateurs SignalR Appelez l'interblocage
if (!connectingTask.IsCompleted)
{
logger.Debug("awaiting for SignalR connection");
await connectingtTask;
logger.Debug("SignalR connected");
}
await hubProxy.Invoke("MethodName", args);
logger.Debug("MethodName invoked");
Où connectingTask = Connection.Start();
et Connection
est une instance de HubConnection.
Lorsque toutes les méthodes (2, par exemple) sont exécutés de sortie ressemble
Method 1: awaiting for SignalR connection
Method 2: awaiting for SignalR connection
Method 1: SignalR connected
Method 1: MethodName invoked
Method 2: SignalR connected
Method 2: MethodName invoked
Et quand seule la première méthode est sortie exécutée ressemble
Method 1: awaiting for SignalR connection
Method 2: awaiting for SignalR connection
Method 1: SignalR connected
Method 2: SignalR connected
Method 1: MethodName invoked
Et Method 2
est dans l'impasse. Il n'y a pas de bloc dans le rappel Connection.StateChanged
et aucune alarme après les méthodes Invoke()
. Alors, qu'est-ce que je fais de mal et comment appeler la même méthode avec différents arguments de manière asynchrone correctement? Devrais-je avoir une file d'attente ou quelque chose?
Modifier Ou est-ce parce que j'envoie Invoke
après await connectionTask
? Je ne peux pas le vérifier maintenant car tout fonctionne correctement sur mon PC. Lien:
https://forums.asp.net/t/2024936.aspx?C+Client+Hangs+Deadlocks+Never+Returns
Modifier Et si concerne la méthode sur mon hub j'invoquez a Task
type de retour.
Modifier Voici ma méthode de plaque tournante:
public Task Attach(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
Je ne suis pas en mesure de tourner sur le traçage, car sur mon PC en général tout droit, mais une fois que je suis en mesure de recréer même question. Ne me souviens pas comment, je vais essayer de trouver plus tard, mais le problème est que je ne reçois pas de réponse lors de l'appel de concentrateurs Attacher la méthode qui est simplement attache l'utilisateur au groupe. Alors maintenant, au lieu de await hubProxy.Invoke("Attach", groupName)
J'utilise hubProxy.Invoke("Attach", groupName)
. Je n'arrive pas à comprendre pourquoi ma première invocation est toujours réussie et je vois une réponse en trace mais après cela toutes les invocations de la même méthode échouent. Mais si j'attends un peu (environ 10 secondes et plus) et invoque cette méthode, je reçois de nouveau une réponse. On dirait que je suis capable d'invoquer la méthode des hubs seulement une fois par ~ 10 sec.
Je vais essayer de recréer ce problème et d'ajouter une trace complète.
Activer le suivi. Afficher plus de code - ce que vous avez n'est pas suffisant pour dire ce qui se passe. – Pawel
@Pawel terminé. J'ajouterai plus d'informations comme le traçage plus tard (1 ou 4 jours). –