HttpClient en utilisant l'instruction des causes de la Tâche annulée

J'ai créé un FileResult : IHttpActionResult webapi type de retour pour mes appels de l'api. Le FileResult télécharge un fichier à partir d'une autre url et renvoie ensuite le flux de données vers le client.

Au départ, mon code a un using déclaration comme ci-dessous:

public async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
    try
    {
        HttpResponseMessage response;
        using (var httpClient = new HttpClient())
        {

            response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new System.Net.Http.StreamContent(
                                    await httpClient.GetStreamAsync(this.filePath))
            };
        }
        return response;
    }
    catch (WebException exception)
    {...}
}

Cependant, ce serait provoquer par intermittence un TaskCanceledException. Je sais que si le HttpClient est disposé avant le asychronous appel est fini de l'état de la Tâche va changer pour annulée. Cependant depuis que j'utilise un attendent: Content = new System.Net.Http.StreamContent(await httpClient.GetStreamAsync(this.filePath)) qui devraient empêcher le HttpClient d'être éliminés au moyen de l'achèvement de la tâche.

Pourquoi est-ce que la tâche d'obtenir annulé? Il n'est pas en raison d'un délai d'attente depuis ce qui s'est passé sur le plus petit des demandes et de ne pas toujours se produire sur de grandes demandes.

Quand j'ai enlevé le using déclaration, le code a fonctionné correctement:

public async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
    try
    {
        HttpResponseMessage response;
        var httpClient = new HttpClient();

        response = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new System.Net.Http.StreamContent(
                                await httpClient.GetStreamAsync(this.filePath))
        };
        return response;
    }
    catch (WebException exception)
    {...}
}

Aucune idée de la raison de l'utilisation de la cause du problème?

Avez-vous essayé d'utiliser un débogueur? Vérifier étape par étape.
Oui, j'ai. Cela n'aide pas vraiment étant donné que l'exception n'est pas jeté ici, mais dans un tout autre endroit. Il se produit dans le Owin pipeline, je suis à l'aide de l'authentification et il attend la prochaine demande.
Le TaskCanceledException ont aucune exception interne?
Il n'y a pas d'exception interne.

OriginalL'auteur Rafi | 2015-10-13