Correctement la manipulation de la HttpClient des exceptions dans async / await

J'espérais que quelqu'un pourrait m'éclairer un peu sur une question, je suis confronté en ce qui concerne async/await gestion de l'exception avec HttpClient. J'ai écrit un code pour illustrer, et il est excecuted à la fois sur Windows Phone 8 dispositif et l'émulateur:

    private async void SearchButton_Click(object sender, EventArgs e)
    {
        try
        {
            HttpClient client = new HttpClient();
            System.Diagnostics.Debug.WriteLine("BEGIN FAULTY REQUEST:");
            string response = await client.GetStringAsync("http://www.ajshdgasjhdgajdhgasjhdgasjdhgasjdhgas.tk/");
            System.Diagnostics.Debug.WriteLine("SUCCESS:");
            System.Diagnostics.Debug.WriteLine(response);
        }
        catch (Exception exception)
        {
            System.Diagnostics.Debug.WriteLine("CAUGHT EXCEPTION:");
            System.Diagnostics.Debug.WriteLine(exception);
        }
    }

Appuyant sur le bouton qui appelle cette fonction, produit la sortie suivante dans la console du débogueur, le plus intéressant étant celles en gras:

COMMENCER DÉFECTUEUX DEMANDE:

Une exception de type 'System.Net.WebException' s'est produite dans System.Windows.ni.dll et n'a pas été traité avant géré/native limite

Une exception de type 'System.Net.WebException' s'est produite dans System.Windows.ni.dll et n'a pas été traité avant géré/native limite

Une exception de première chance de type 'System.Net.Http.HttpRequestException' s'est produite dans mscorlib.ni.dll

Une exception de type 'System.Net.Http.HttpRequestException' s'est produite dans mscorlib.ni.dll et n'a pas été traité avant géré/native limite

PRIS D'EXCEPTION:
(et ici, il imprime le HttpRequestException)

Bien sûr, je m'attends à une erreur dans ce cas depuis l'URL que j'ai fais appel est un non-sens. Ce que je ne suis pas de comprendre ici, c'est pourquoi le débogueur rapports que les exceptions ne sont pas traitées, lors de la sortie simultanée des rapports que l'exception est interceptée. Aussi, l'INTERFACE utilisateur de l'application devient beaucoup moins sensible alors que la sortie est en cours d'impression, indiquant que quelque chose est sans doute pas inutile.

Est-ce pas la façon de gérer les exceptions lorsque l'on travaille avec async et await? J'apprécie tous les commentaires! Merci.

Aussi loin que la réactivité que vous ne devriez pas exécuter long processus dans l'INTERFACE utilisateur de l'événement. Ceux-ci devraient être rapide et long processus en cours d'exécution doivent être accomplies dans un autre thread. Essayez le BackgroundWorker msdn.microsoft.com/en-us/library/...

OriginalL'auteur Nils Holtar | 2013-09-26

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *