[英]Receiving TaskCanceledException when making http request
發出Http請求時,我收到System.Threading.Tasks.TaskCanceledException
。
public async Task<CommonResult<T>> GetRequest<T>(TokenModel token, string url)
{
using (var client = new HttpClient())
{
client.MaxResponseContentBufferSize = int.MaxValue;
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(token.TokenType, token.AccessToken);
var response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
{
return await OK<T>(response);
}
else
{
//The response is authorized but some other error.
if (IsAuthorized(response.StatusCode))
return Error<T>(response.StatusCode.ToString());
//Unable to refresh token.
if (!await RenewToken(token))
return Error<T>("Fail to refresh token");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(GlobalData.Token.TokenType, GlobalData.Token.AccessToken);
response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
{
return await OK<T>(response);
}
else
{
return Error<T>(response.StatusCode.ToString());
}
}
}
}
當我調試服務器代碼而不繼續時,會發生這種情況。 這是自然行為還是我在客戶端代碼中缺少某些內容?
這是預期的行為,因為默認情況下HttpClient
將超時設置為100秒 。
HttpClient超時
您可以調整HttpClient
並設置自定義超時時間。 例如,您可以設置InfiniteTimeSpan
以防止發生超時。
client.Timeout = Timeout.InfiniteTimeSpan;
HttpClient請求超時
您還可以使用CancellationTokenSource為每個請求定義超時
using (var cts = new CancellationTokenSource(Timeout.InfiniteTimeSpan))
{
await client.GetAsync(url, cts.Token).ConfigureAwait(false);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.