Sekuntikello voi lopettaa odottamisen, vaikka HTTP-pyyntö jatkuu. Anna peruutus itse toiminnolle, kun välityspalvelimen kautta tehtävällä yrityksellä on aiottu aikabudjetti.

Nykyaikaiselle .NET-sovellukselle, jossa on olemassa välityspalvelimelle määritetty HttpClient:

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);

Sama budjetti alkaa ennen valmistelua ja pysyy aktiivisena rungon lukemisen ajan. ResponseHeadersRead palauttaa hallinnan otsikoiden jälkeen, joten HttpClientin oma valmistumisaikakatkaisu ei yksinään määritä myöhempää rungon luvun budjettia.

Pidä peruutus erillään HTTP-tilasta ja siirtovirheistä. OperationCanceledException voi tulla annetusta tunnuksesta tai toisesta määritetystä aikakatkaisusta; tarkista soveltuva peruutuslähde sen sijaan, että raportoisit jokaisen epäonnistumisen kuolleeksi välityspalvelimeksi.

Käytä uudelleen asiakasta, joka omistaa tämän välityspalvelinreitin. Yrityksen peruuttaminen ei tarkoita, että koko yhteyspooli on rakennettava uudelleen jokaista myöhempää pyyntöä varten.

Esimerkki puskuroi äärellisen vastauksen rungon. Suoratoistolatauksen tulisi välittää tunnus virran kopiointisilmukkansa läpi ja vapauttaa vastaus jokaisella poistumispolulla.

Peruutus ilmaisee toimintaperiaatteen, ei tarkkaa reaaliaikalupausta jokaiselle alustan taustatoiminnalle. Vältä sen korvaamista loputtomalla Task.IsCompleted-kyselysilmukalla.

Aiheeseen liittyvät artikkelit