9
votes

Erreur PostaSync httpClient avec API Web - System.AccrégationException "Une tâche a été annulée".

J'essaie d'appeler la méthode PostaSync à l'aide du système.net.http.httpclient à partir de l'API Web. Je reçois l'erreur suivante:

System.AccrégationException "Une tâche a été annulée"

tâche:

ID = 1, Status = System.threading.Tasks.TaskStatus.canalled, méthode = "{null}", résultat = "{pas encore calculé}"

code: xxx

i suppose que le responsable de la responsabilité forcera la méthode à exécuter de manière synchrone?

C'est une application WPF, pas ASP .NET.


0 commentaires

3 Réponses :


0
votes

non synchrone, la seconde tâche sera également exécutée d'ASYNC mais enchaînée avec la première tâche, donc seulement après la première tâche exécutée.

semble être la première tâche - PostaSync a été exécuté avec une erreur. Essayez d'attraper des exceptions agrégées TPL et de trouver plus de détails dans la collection d'exceptions internes à partir de AggregateException Par exemple, comme ici ou abonnez-vous à Taskscheduler.unobservaServedTasception et logez-vous toutes vos exceptions


0 commentaires

4
votes

En termes de débogage, vous pouvez essayer d'écrire une méthode d'extension pour obtenir l'exception:

public static HttpResponseMessage PostAsyncSafe(this HttpClient client, string requestUri, string content)
        {
            var requestContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            return PerformActionSafe(() => (client.PostAsync(requestUri, requestContent)).Result);
        }

public static HttpResponseMessage PerformActionSafe(Func<HttpResponseMessage> action)
        {
            try
            {
                return action();
            }
            catch (AggregateException aex)
            {
                Exception firstException = null;
                if (aex.InnerExceptions != null && aex.InnerExceptions.Any())
                {
                    firstException = aex.InnerExceptions.First();

                    if (firstException.InnerException != null)
                        firstException = firstException.InnerException;
                }

                var response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    Content =
                        new StringContent(firstException != null
                                            ? firstException.ToString()
                                            : "Encountered an AggreggateException without any inner exceptions")
                };

                return response;
            }
        }


1 commentaires

Truc de débogage Travaillé comme un charme, j'ai détecté mon logiciel AV me donne un temps difficile avec les certificats HTTPS et le réseau de bureau a un problème avec les demandes d'azur!



10
votes

Je reçois cette même erreur et je l'ai suivi à mon httpClient chronométrant. Le délai d'attente par défaut est de 100 secondes. J'ai ajouté ce qui suit à la création du httpclient.

xxx


0 commentaires