私はapi呼び出しのためにFileResult : IHttpActionResult
webapi戻り値の型を作成しました。 FileResultは別のURLからファイルをダウンロードし、ストリームをクライアントに返します。HttpClientがステートメントを使用しています原因:タスクがキャンセルされました
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
を引き起こす:
は、最初は私のコードは以下のようなusing
文を持っていました。私は、非同期呼び出しが終了する前に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)
{...}
}
を使用して、なぜすべてのアイデアは、問題を引き起こしましたか?
デバッガーを使用してみましたか?それを段階的にチェックする。 – kevintjuh93
はい、あります。例外がここにスローされるのではなく、完全に異なる場所にあるので、実際には役に立ちません。これはOwinのパイプラインで発生します。私は認証がどこであり、次の要求を待っています。 – Rafi
'TaskCanceledException'に内部例外がありますか? –