Я пытаюсь решить проблемы с подключением в моем приложении Xamarin для Android.
Я использую Xamarin.Essentials для проверки подключения, а затем использую Refit для получения данных:
var reqUtenti = new ReqUtenti();
tokenSource.CancelAfter(20000);
CancellationToken token = tokenSource.Token;
var api = RestService.For<IUtentiApi>("http://10.0.2.2:3105");
var respUtenti = new RespUtenti();
try
{
respUtenti = await api.GetUtentiAsync(reqUtenti, token);
respUtenti.status = 0;
}
catch (ApiException exception)
{
respUtenti.status = 1;
}
catch (OperationCanceledException)
{
respUtenti.status = 2;
}
catch (Exception exception)
{
respUtenti.status = 3;
}
Допустим, что при работающем веб-сервисе поиск не должен занимать более 20 секунд, поэтому я установил таймаут с помощью CancellationToken. Это работает и вызывает исключение OperationCanceledException.
То же самое происходит, если веб-служба не работает / недоступна после 20 секунд.
Если я не установил этот тайм-аут, а веб-сервис недоступен / не работает, я получаю httpRequestError через 70/80 секунд.
Я хотел бы изменить это время ожидания и получить httpRequestError через несколько секунд.
После использования HttpWebRequest я смог сделать это, установив ReadWriteTimeout.
По сути, я хочу разграничить тайм-ауты: один для завершения всего процесса и один для установления http-соединения.
Update1
Заголовок был исправлен с «Переоснащение до переоснащения», но на самом деле это переоснащение (https://github.com/reactiveui/refit)
UPDATE2
Вопрос не в том, как установить время ожидания для запроса на установку, я делаю это на моем примере. Этот тайм-аут касается всего процесса извлечения данных.
Мой вопрос о том, как установить тайм-аут для сокетного соединения, лежащего в основе http-соединения. Это было возможно с HttpWebRequest, где присутствовали два тайм-аута: Timeout (весь процесс) и ReadWriteTimeout (тайм-аут для установления соединения). Я знаю, что Refit работает с HttpClient, поэтому можно установить время ожидания для запроса на подключение?