Perduokite terminą operacijai, kuri gali atšaukti tinklo darbą. Esamam .NET HttpClient, sukonfigūruotam per tarpinį serverį:

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

Programa pateikia client ir uri. Ši perkrova priima atšaukimo žetoną; laiko limitas aplink jo užduoties laukimą apribotų tik to kviečiančiojo laukimą. Baigtumo vėliavėlės tikrinimas turi tą pačią problemą: kviečiantysis gali išeiti, kol lizdai ir darbuotojai lieka užimti.

Atšaukimas vadovaujasi kliento įgyvendinimu ir valymo keliu. Jis nežada, kad kiekvienas žemesnio lygio veiksmas sustos ties tikslia instrukcija. Leiskite tam keliui baigtis ir atlaisvinkite išteklius, kuriuos valdo operacija. Įtraukite į dizainą atskirai valdomą kūno skaitymą; moderniai .NET ResponseHeadersRead operacijai perduokite tą patį žetoną per kūno skaitymą. Kiti klientai teikia savo atšaukimo, nutraukimo ir valymo sąsajas.

Pakartotinis bandymas turi turėti ankstesnio bandymo rezultatą. Išsaugokite jo identifikatorių ir pasirinktą tarpinį serverį, prireikus prašykite atšaukimo ir venkite prarasti užduotį, be galo pradėdami pakaitalus. Priešingu atveju lėtas galinis taškas gali kaupti darbą greičiau, nei programa jį atlaisvina.

Nuotolinis rezultatas reikalauja atskiro apdorojimo. Galbūt paskirties vieta jau gavo siuntimą, kai įvyksta atšaukimas. Naudokite programos atkūrimo arba idempotencijos politiką; vietinio darbo sustabdymas neatšaukia nuotolinio veiksmo.

Susiję straipsniai