Ich habe eine FileResult : IHttpActionResult
Webapi Rückgabetyp für meine API-Anrufe erstellt. Das FileResult lädt eine Datei von einer anderen URL herunter und gibt den Stream dann an den Client zurück.HttpClient in der Verwendung der Anweisung verursacht Aufgabe abgebrochen
Zunächst hatte meinen Code ein using
Aussage wie folgt:
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)
{...}
}
dies jedoch intermittierend eine TaskCanceledException
verursachen würde. Ich weiß, dass, wenn der HttpClient vor dem asynchronen Aufruf beendet wird, der Status der Task in abgebrochen geändert wird. Da ich jedoch erwarte in: , die verhindern sollte, dass der HttpClient in der Mitte der Task abgeschlossen veräußert werden.
Warum wird diese Aufgabe abgebrochen? Es ist nicht wegen einer Zeitüberschreitung, da dies bei den kleinsten Anfragen passiert ist und nicht immer bei großen Anfragen auftritt.
Wenn ich entfernt die using
Anweisung der Code richtig gearbeitet:
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)
{...}
}
Jede Idee, warum das mit dem Problem verursacht?
Haben Sie versucht, einen Debugger zu verwenden? Überprüfen Sie es Schritt für Schritt. – kevintjuh93
Ja, ich habe. Es hilft nicht wirklich, da die Ausnahme nicht hier, sondern an einem völlig anderen Ort ausgelöst wird. Es kommt in der Owin-Pipeline vor, die ich verwende, wo die Authentifizierung ist und es wartet auf die nächste Anfrage. – Rafi
Hat die 'TaskCanceledException' eine innere Ausnahme? –