Перадайце тэрмін аперацыі, якая можа скасаваць сеткавую працу. Для існуючага .NET HttpClient, наладжанага праз проксі:

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

Прыкладанне падае client і uri. Гэтая перагрузка прымае токен скасавання; тайм-аўт вакол чакання яе задачы абмяжуе толькі чаканне гэтага выклікаючага боку. Апытанне сцяга завяршэння мае тую ж праблему: выклікаючы бок можа сысці, пакуль сокеты і працоўныя застаюцца занятымі.

Скасаванне ідзе за рэалізацыяй кліента і шляхам ачысткі. Яно не абяцае, што кожнае дзеянне ніжняга ўзроўню спыніцца на дакладнай інструкцыі. Дазвольце гэтаму шляху завяршыцца і вызваліце рэсурсы, якімі валодае аперацыя. Уключыце ў праект асобна кіраванае чытанне цела; для сучаснай аперацыі .NET ResponseHeadersRead перадайце той жа токен праз чытанне цела. Іншыя кліенты прадастаўляюць свае інтэрфейсы скасавання, перарывання і ачысткі.

Паўтор патрабуе выніку для папярэдняй спробы. Захавайце яе ідэнтыфікатар і абраны проксі, запытайце скасаванне, калі трэба, і пазбягайце страты задачы, бясконца запускаючы замены. Інакш павольная канцавая кропка можа назапашваць працу хутчэй, чым прыкладанне яе вызваляе.

Аддалены вынік патрабуе асобнай апрацоўкі. Прызначэнне можа ўжо атрымаць адпраўку, калі адбываецца скасаванне. Выкарыстоўвайце палітыку аднаўлення або ідэмпатэнтнасці прыкладання; спыненне лакальнай працы не адмяняе аддаленага дзеяння.

Падобныя артыкулы