Odovzdajte termín operácii, ktorá môže zrušiť sieťovú prácu. Pre existujúci .NET HttpClient nakonfigurovaný cez proxy:

using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);

Aplikácia poskytuje client a uri. Toto preťaženie preberá token zrušenia; časový limit okolo čakania na jeho úlohu by obmedzil len čakanie tohto volajúceho. Dotazovanie na príznak dokončenia má rovnaký problém: volajúci môže odísť, kým sockety a pracovníci zostávajú obsadené.

Zrušenie sa riadi implementáciou klienta a cestou čistenia. Nesľubuje, že sa každá akcia nižšej úrovne zastaví na presnej inštrukcii. Nechajte túto cestu dokončiť a uvoľnite prostriedky, ktoré operácia vlastní. Zahrňte do návrhu samostatne riadené čítanie tela; pri modernej operácii .NET ResponseHeadersRead odovzdajte ten istý token aj čítaním tela. Iní klienti poskytujú vlastné rozhrania na zrušenie, prerušenie a čistenie.

Opakovanie potrebuje výsledok predchádzajúceho pokusu. Zachovajte jeho identifikátor a zvolenú proxy, požadujte zrušenie, keď je to potrebné, a vyhnite sa strate úlohy pri nekonečnom spúšťaní náhrad. Inak môže pomalý koncový bod hromadiť prácu rýchlejšie, než ju aplikácia uvoľňuje.

Vzdialený výsledok si vyžaduje samostatné spracovanie. Cieľ mohol už prijať odoslanie, keď dôjde k zrušeniu. Použite politiku obnovy alebo idempotencie aplikácie; zastavenie lokálnej práce nezruší vzdialenú akciu.

Súvisiace články