appel de méthode asynchrone sans attendre #2

J'ai une méthode asynchrone:

public async Task<bool> ValidateRequestAsync(string userName, string password)
{
    using (HttpClient client = new HttpClient())
    {
        HttpResponseMessage response = await client.GetAsync(url);
        string stringResponse = await response.Content.ReadAsStringAsync();

        return bool.Parse(stringResponse);
    }
}

J'appelle cette méthode comme ceci:

bool isValid = await ValidateRequestAsync("user1", "pass1");

Puis-je appeler la même méthode à partir d'une méthode synchrone, sans l'aide de await mot-clé?

Ex:

public bool ValidateRequest(string userName, string password)
{
    return ValidateRequestAsync(userName, password).Result;
}

Je pense que cela va provoquer un blocage.

MODIFIER

L'appel de la méthode, comme ci-dessus fait l'appel jamais de fin. (La méthode n'a pas atteint la fin)

  • Je crois que l'appel d'une méthode asynchrone sans attendre simplement entraînera la méthode à appeler de façon synchrone, le comportement dépend de ce que votre méthode ne fait.
  • Je l'ai essayé! Il ressemble à l'appel de la méthode ne se termine jamais
  • la méthode est toujours appelée de manière synchrone. Elle retourne une tâche, c'est la seule différence. La magie est dans l'attendent, pas à l'appel.
  • Ah je vois, je n'ai pas réellement utilisé async encore; j'ai besoin d'aller en lire plus sur la mécanique. Merci.
  • Il est possible que votre méthode de blocage, mais c'est un résultat logique de ne pas partir du fait que vous êtes en l'appelant en mode synchrone.
  • Si vous exécutez ce code sur un seul thread contexte d'exécution, tel qu'un thread d'INTERFACE utilisateur, il sera très certainement l'impasse, parce que le thread est en attente pour le fil de devenir disponibles. Si vous l'exécutez sur un pool de threads thread, vous êtes fine.
  • J'ai édité ton titre. Se reporter à la rubrique "si vous avez des questions comprennent “tags” dans leurs titres?", où le consensus est "non, ils ne devraient pas".
  • Je vais faire la prochaine fois, merci

InformationsquelleAutor Catalin | 2013-11-05