web-dev-qa-db-ja.com

デフォルトのタイムアウトを変更する

次の実装があります。また、デフォルトのタイムアウトは100秒です。

デフォルトのタイムアウトを変更するにはどうすればよいですか?

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()))
        {

        }
    }
 }
6
casillas

HttpClientのデフォルトのタイムアウトは 100秒 です。


HttpClientタイムアウト

HttpClientに合わせて調整し、HttpService内にカスタムのタイムアウト時間を設定できます。

httpClient.Timeout = 5000;


HttpClientリクエストタイムアウト

または、キャンセルトークンを使用してタイムアウトを定義することもできます CancellationTokenSource

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

いくつかの注意事項:

  1. HttpService内で変更を加えると、すべてのリクエストに影響します。リクエストごとに行う場合は、必要なタイムアウト期間をパラメーターとして渡す必要があります。
  2. CancellationTokenSourceのインスタンスを渡すことは、そのタイムアウトがTimeoutによって設定されたHttpClientよりも小さく、HttpClientのタイムアウトが無限でない場合に機能します。そうしないと、HttpClientのタイムアウトが発生します。
12
Plac3Hold3r

タイムアウトで作成されたタスクが表示されないので、私は助けることができません。

しかし、MSDNが言うよりも、アプリケーションの内部で System.Net.Http を使用している場合:

デフォルト値は100,000ミリ秒(100秒)です。

HttpClient.Timeout プロパティの値を変更できます

clent.Timeout = 5*1000;
1
Dolev