HttpClient ao usar a instrução causa a tarefa cancelada
Eu criei umFileResult : IHttpActionResult
tipo de retorno webapi para minhas chamadas api. O FileResult baixa um arquivo de outro URL e retorna o fluxo ao cliente.
Inicialmente, meu código tinha umusing
declaração como abaixo:
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)
{...}
}
No entanto, isso causaria intermitentemente umaTaskCanceledException
. Sei que se o HttpClient for descartado antes do término da chamada assíncrona, o estado da tarefa mudará para cancelado. No entanto, desde que eu uso umaguardam no:Content = new System.Net.Http.StreamContent(await httpClient.GetStreamAsync(this.filePath))
isso deve impedir que o HttpClient seja descartado no meio da conclusão da tarefa.
Por que essa tarefa é cancelada? Não é devido a um tempo limite, pois isso ocorreu nas solicitações menores e nem sempre ocorre em solicitações grandes.
Quando eu removi ousing
declaração o código funcionou corretamente:
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)
{...}
}
Alguma idéia de por que o uso causou o problema?