Как уменьшить время выполнения запроса? - PullRequest
1 голос
/ 30 апреля 2019

Я использую API Gmail и пытаюсь получить количество сообщений.Если возникают проблемы с подключением к Интернету, Execute() пытается выполнить более 1 минуты.Я хочу пропустить выполнение через 5 секунд без ответа и больше не ждать.

var getEmailsRequest = new UsersResource.MessagesResource.ListRequest(service, userId);
try
{
    messagesCount = getEmailsRequest.Execute().Messages.Count;
}
catch (TaskCanceledException ex)
{
    //after more than minute of waiting with no connection I can catch this exception
}

1 Ответ

3 голосов
/ 30 апреля 2019

Отказ от ответственности: я ничего не знаю о рассматриваемой библиотеке ;-)


Если вы используете googleapis / google-api-dotnet-client

Тогда вы сможете настроить время ожидания с помощью this :

/// <summary> 
/// HTTP client initializer for changing the default behavior of HTTP client. 
/// Use this initializer to change default values like timeout and number of tries. 
/// You can also set different handlers and interceptors like 
/// <see cref="IHttpUnsuccessfulResponseHandler"/>s, 
/// <see cref="IHttpExceptionHandler"/>s and <see cref="IHttpExecuteInterceptor"/>s.
/// </summary>
public interface IConfigurableHttpClientInitializer
{
    /// <summary>Initializes a HTTP client after it was created.</summary>
    void Initialize(ConfigurableHttpClient httpClient);
}

В качестве альтернативы вы можете использовать ExecuteAsync с токеном отмены, например ::

CancellationTokenSource source = 
             new CancellationTokenSource(TimeSpan.FromMilliseconds(5000));

var someResult = await getEmailsRequest.ExecuteAsync(source.Token);
messagesCount = someResult.Messages.Count;

Обратите внимание, что для этого вам понадобится async Task в качестве сигнатуры метода.

...