A stopperóra abbahagyhatja a várakozást, miközben a HTTP-kérés folytatódik. Adjon megszakítást magának a műveletnek, amikor egy proxy-n keresztüli kísérletnek szánt időkerete van.

Egy modern .NET-alkalmazáshoz, amely már rendelkezik proxyra beállított HttpClient-tel:

using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(5));
using var response = await client.GetAsync(
    targetUrl,
    HttpCompletionOption.ResponseHeadersRead,
    budget.Token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(budget.Token);

Ugyanaz az időkeret az előkészítés előtt indul, és aktív marad a törzs olvasása közben. A ResponseHeadersRead a fejlécek után adja vissza a vezérlést, ezért a HttpClient saját befejezési időtúllépése önmagában nem határozza meg a későbbi törzsolvasási időkeretet.

Tartsa a megszakítást elkülönítve a HTTP-állapottól és a szállítási hibáktól. Az OperationCanceledException származhat a megadott tokentől vagy egy másik beállított időtúllépéstől; vizsgálja meg az alkalmazandó megszakítási forrást, ahelyett hogy minden hibát halott proxyként jelentene.

Használja újra az ügyfelet, amely ehhez a proxy-útvonalhoz tartozik. Egy kísérlet megszakítása nem feltétlenül jelenti a teljes kapcsolatkészlet újraépítését minden későbbi kéréshez.

A példa egy véges választörzset pufferel. Egy streamelt letöltésnek át kell adnia a tokent a streammásoló ciklusán, és minden kilépési útvonalon fel kell szabadítania a választ.

A megszakítás működési szabályzatot fejez ki, nem pedig pontos valós idejű ígéretet minden mögöttes platformműveletre. Kerülje, hogy egy végtelen, Task.IsCompleted-re épülő lekérdezési ciklussal helyettesítse.

Kapcsolódó cikkek