Nododiet termiņu darbībai, kas var atcelt tīkla darbu. Esošam .NET HttpClient, kas konfigurēts caur starpniekserveri:

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

Lietojumprogramma nodrošina client un uri. Šī pārslodze saņem atcelšanas žetonu; taimauts ap tās uzdevuma gaidīšanu ierobežotu tikai šī zvanītāja gaidīšanu. Pabeigšanas karodziņa aptauja rada to pašu problēmu: zvanītājs var aiziet, kamēr ligzdas un darbinieki paliek aizņemti.

Atcelšana seko klienta ieviešanai un tīrīšanas ceļam. Tā nesola, ka katra zemāka līmeņa darbība apstāsies pie precīzas instrukcijas. Ļaujiet šim ceļam pabeigties un atbrīvojiet resursus, kas pieder darbībai. Iekļaujiet dizainā atsevišķi kontrolētu ķermeņa lasīšanu; modernai .NET ResponseHeadersRead darbībai nododiet to pašu žetonu caur ķermeņa lasīšanu. Citi klienti nodrošina savas atcelšanas, pārtraukšanas un tīrīšanas saskarnes.

Atkārtotam mēģinājumam vajadzīgs iepriekšējā mēģinājuma iznākums. Saglabājiet tā identifikatoru un izvēlēto starpniekserveri, pieprasiet atcelšanu, kad nepieciešams, un izvairieties zaudēt uzdevumu, bezgalīgi uzsākot aizstājējus. Citādi lēns galapunkts var uzkrāt darbu ātrāk, nekā lietojumprogramma to atbrīvo.

Attālinātajam iznākumam nepieciešama atsevišķa apstrāde. Iespējams, galamērķis jau ir saņēmis nosūtījumu, kad notiek atcelšana. Izmantojiet lietojumprogrammas atkopšanas vai idempotences politiku; vietējā darba pārtraukšana neatceļ attālinātu darbību.

Saistītie raksti