簡體   English   中英

發出HTTP請求時接收TaskCanceledException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM