Как узнать, с какого момента инициируется отмена задачи HttpClient - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть следующий код для получения токена на предъявителя и вызова Web API в приложении c #.

public async Task<HttpResponseMessage> SendHttpRequest()
{
    HttpResponseMessage response = null;
    try
    {
        HttpClient client = new HttpClient();
        string accessToken = await GetBearerToken(resourceUrl, clientId, clientSecret, tokenProviderUrl);
        if (!string.IsNullOrEmpty(accessToken))
            httpRequest.Headers.Add("Authorization", ("Bearer " + accessToken));

        response = await client.SendAsync(httpRequest);
    }
    catch(Exception ex)
    {
        log.Error("Exception raised while sending HTTP request");
        log.Error("Exception details : " + ex.Message);
    }           

    return response;
}

public async Task<string> GetBearerToken()
{           
    HttpResponseMessage response = null;
    HttpClient client = new HttpClient();
    string token = "";
    try
    {
        var request = new HttpRequestMessage(HttpMethod.Post, tokenProviderUrl);
        request.Content = new FormUrlEncodedContent(new Dictionary<string, string> {
            { "client_id",clientId},
            { "client_secret", clientSecret },
            { "grant_type", "client_credentials" },
            { "resource", resource },
        });

        response = await client.SendAsync(request);                
        var payload = JObject.Parse(await response.Content.ReadAsStringAsync());
        token = payload.Value<string>("access_token");                
    }
    catch (HttpRequestException ex)
    {
        log.Error("Error in GetToken : " + ex.Message.ToString());
    }
    return token;
}

Проблема, с которой я здесь сталкиваюсь, заключается в том, что иногда этот код вызывает исключение, говорящее «Задача была отменена» время от времени, а не каждый раз. Я искал в Интернете и наткнулся на этот ответ. Итак, я проверил, отменяется ли задание. Затем я увеличил время ожидания до 30 минут, как указано в этом ответе.

Теперь странно то, что задача ждет 30 минут (или любой другой тайм-аут, который мы указали), а затем выдает «Задача была отменена». Это сводит меня с ума.

Я хочу знать, почему Задание отменяется, если мы не запрашиваем его явно, и от кого или откуда оно отменяется? Можно ли найти источник запроса на отмену?

Любая помощь в этом отношении высоко ценится, так как я не могу понять проблему.

Пожалуйста, предположите, что все переменные имеют правильные значения, хотя это здесь не упоминается.

EDIT

Сообщение об исключении:

Задача была отменена.

Это трассировка стека исключений:

Исключение StackTrace: в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task задача) в System.Net.Http.HttpClient.d__58.MoveNext () --- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task задача) в System.Runtime.CompilerServices.TaskAwaiter`1.GetResult () в SampleProject.d__2.MoveNext () в C: \ Users \ SampleProject \ HttpHelper.cs: строка 145 --- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение ---

...