Ipaabot ang deadline sa operasyong makakakansela ng gawain sa network. Para sa umiiral na .NET HttpClient na naka-configure sa proxy:

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

Nagbibigay ang aplikasyon ng client at uri. Tinatanggap ng overload na ito ang cancellation token; ang timeout sa paligid ng paghihintay sa gawain nito ay lilitaw lamang sa paghihintay ng tumatawag na iyon. May parehong problema ang pag-poll sa flag ng pagkumpleto: maaaring umalis ang tumatawag habang abala pa rin ang mga socket at worker.

Sinusundan ng pagkansela ang implementasyon ng client at ang landas ng paglilinis. Hindi nito ipinapangako na hihinto ang bawat aksyon sa mas mababang antas sa eksaktong tagubilin. Hayaang matapos ang landas na iyon at palayain ang mga resource na pag-aari ng operasyon. Isama sa disenyo ang hiwalay na kontroladong pagbasa ng body; para sa modernong .NET ResponseHeadersRead na operasyon, ipasa ang parehong token sa pagbasa ng body. Ang ibang mga client ay may sariling interface sa pagkansela, pag-abort at paglilinis.

Kailangan ng bagong pagtatangka ang resulta para sa nakaraang pagtatangka. Itago ang identifier at napiling proxy, humiling ng pagkansela kapag kailangan at iwasang mawala ang gawain habang walang hanggang nagsisimula ng mga kapalit. Kung hindi, ang mabagal na endpoint ay maaaring mag-ipon ng gawain nang mas mabilis kaysa sa pagpapalaya ng aplikasyon.

Ang malayuang resulta ay nangangailangan ng hiwalay na paghawak. Maaaring natanggap na ng destinasyon ang isang pagsusumite nang mangyari ang pagkansela. Gamitin ang patakaran sa pagbawi o idempotency ng aplikasyon; ang paghinto sa lokal na gawain ay hindi nagbabalik ng malayuang aksyon.

Kaugnay na mga artikulo