Le Statut De La Tâche WaitingForActivation
J'ai la fonction suivante :
async public Task<bool> checkNetwork (RestClient _client, ConnectivityManager conn)
{
var connected = false;
var activeConn = conn.ActiveNetworkInfo;
if (activeConn != null && activeConn.IsConnected) {
var request = new RestRequest ();
request.Timeout = 5000;
var response = await _client.ExecuteAwait (request);
//Task<IRestResponse> tmpResponse = _client.ExecuteAsync (request);
if (response.ErrorException != null)
connected = false;
else
connected = true;
}
return connected;
}
Il garde la pendaison parce que l'état ne quitte jamais WaitingForActivation quand je l'appelle. Des idées?
Je suppose
ExecuteAwait
est une méthode personnalisée que vous avez écrit. Pouvez-vous montrer les méthodes de code?
OriginalL'auteur user3846013 | 2014-07-16
Vous devez vous connecter pour publier un commentaire.
En fait, la
WaitingForActivation
est juste une indication que la tâche n'est pas terminée. Ce n'est pas la cause de l'accrocher, mais un indicateur de cela. La promesse des Tâches (y compris les tâches retourné parasync
méthodes) resteront dans leWaitingForActivation
état jusqu'à la fin; j'ai décrire l'état de la tâche de la machine plus en détail sur mon blog.La cause la plus probable d'une impasse appelle
Task<T>.Result
ouTask.Wait
plus haut dans la pile. Je décris cette impasse en plein sur mon blog, mais l'essentiel, c'est queawait
capturer un "contexte actuel" et de l'utiliser pour reprendre sonasync
méthode. Si elle est appelée à partir de la thread de l'INTERFACE utilisateur, alors que le contexte est le thread de l'INTERFACE utilisateur, et si le thread d'INTERFACE utilisateur est bloqué par l'appel deResult
/Wait
, puis leasync
méthode ne peut pas reprendre sur ce thread d'INTERFACE utilisateur.OriginalL'auteur Stephen Cleary