Search code examples
c#xamarinmvvmcross

Change default timeout


I have the following implementation. And the default timeout is 100 seconds.

I wonder how can I able to change the default timeout?

HttpService.cs

public class HttpService : IHttpService
{

   private static async Task GoRequestAsync<T>(string url, Dictionary<string, object> parameters, HttpMethod method,
        Action<T> successAction, Action<Exception> errorAction = null, string body = "")
        where T : class
    {
        using (var httpClient = new HttpClient(new HttpClientHandler()))
        {

        }
    }
 }

Solution

  • The default timeout of an HttpClient is 100 seconds.


    HttpClient Timeout

    You can adjust to your HttpClient and set a custom timeout duration inside of your HttpService.

    httpClient.Timeout = 5000;


    HttpClient Request Timeout

    You could alternatively define a timeout via a cancellation token CancellationTokenSource

    using (var cts = new CancellationTokenSource(new TimeSpan(0, 0, 5)))
    {
        await httpClient.GetAsync(url, cts.Token).ConfigureAwait(false);
    }
    

    A few notes:

    1. Making changes inside of the HttpClient will affect all requests. If you want to make it per request you will need to pass through your desired timeout duration as a parameter.
    2. Passing an instance of CancellationTokenSource will work if it's timeout is lower than Timeout set by the HttpClient and HttpClient's timeout is not infinite. Otherwise, the HttpClient's timeout will take place.