如何减少尝试执行请求的时间?

时间:2019-04-29 22:25:19

标签: c# gmail-api

我正在使用gmail api并尝试获取邮件数。如果发生互联网连接问题,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 个答案:

答案 0 :(得分:3)

免责声明:我对所讨论的库一无所知;-)


如果您使用的是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作为方法签名。