HttpClient в использовании оператора вызывает Задача отменена
Я создалFileResult : IHttpActionResult
Тип возврата webapi для моих вызовов API. FileResult загружает файл с другого URL-адреса, а затем возвращает поток клиенту.
Изначально мой код имелusing
утверждение как ниже:
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)
{...}
}
Однако это будет периодически вызыватьTaskCanceledException
, Я знаю, что если HttpClient удаляется до завершения асинхронного вызова, состояние задачи изменится на отмененное. Однако, так как я используюЖдите в:Content = new System.Net.Http.StreamContent(await httpClient.GetStreamAsync(this.filePath))
это должно препятствовать удалению HttpClient в середине выполнения задачи.
Почему эта задача отменяется? Это не из-за тайм-аута, так как это произошло для самых маленьких запросов и не всегда происходит для больших запросов.
Когда я удалилusing
Скажите, что код работает правильно:
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)
{...}
}
Любая идея, почему использование вызвало проблему?