Попробуйте выполнить асинхронную задачу за x секунд [дублировать]

Структура Symfony имеет пакеты, которые могут анализировать HTML, и вы можете использовать стиль CSS для выбора DOMs вместо использования XPath .

13
задан gdoron 18 January 2016 в 14:09
поделиться

3 ответа

Вы не можете сделать это, чтобы изменить это. Это просто поведение по умолчанию в реализации HttpClient.

Свойство Timeout должно быть установлено до вызова метода GetRequestStream или GetResponse. Из раздела HttpClient.Timeout Remark

Чтобы изменить таймаут, было бы лучше создать новый экземпляр HttpClient.

client = new HttpClient();
client.Timeout = 20; //set new timeout
8
ответ дан Andrew Smith 25 August 2018 в 15:53
поделиться

Внутренне свойство Timeout используется для установки CancellationTokenSource, который прервет операцию async, когда этот таймаут будет достигнут. Поскольку некоторые перегрузки методов HttpClient принимают CancellationTokens, мы можем создавать вспомогательные методы для получения пользовательских тайм-аутов для определенных операций:

public async Task<string> GetStringAsync(string requestUri, TimeSpan timeout)
{
    using (var cts = new CancellationTokenSource(timeout))
    {
        HttpResponseMessage response = await _httpClient.GetAsync(requestUri, cts.Token)
        response.EnsureSuccessStatusCode();

        return await response.Content.ReadAsStringAsync();
    }
}
4
ответ дан Monsignor 25 August 2018 в 15:53
поделиться

Недостаток поддержки пользовательских тайм-аутов на уровне запросов всегда был недостатком HttpClient в моем сознании. Если вы не возражаете против небольшой зависимости от библиотеки, Flurl.Http [отказ от ответственности: я автор] поддерживает это напрямую:

"http://api.com/endpoint".WithTimeout(30).GetJsonAsync<T>();

Это истинный запрос, настройка уровня; все вызовы одного и того же хоста используют общий экземпляр HttpClient под капотом, а одновременные вызовы с разными тайм-аутами не конфликтуют. Существует настраиваемое глобальное значение по умолчанию (сначала 100 секунд, так же как HttpClient).

2
ответ дан Todd Menier 25 August 2018 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: