გადაეცით ვადა იმ ოპერაციას, რომელსაც შეუძლია ქსელური სამუშაოს გაუქმება. არსებული .NET HttpClient-ისთვის, რომელიც პროქსის გავლით არის კონფიგურირებული:

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

აპლიკაცია აწვდის client-ს და uri-ს. ეს გადატვირთვა იღებს გაუქმების ტოკენს; მისი ამოცანის ლოდინის გარშემო არსებული დროის ლიმიტი მხოლოდ ამ გამომძახებლის ლოდინს შეზღუდავს. დასრულების დროშის გამოკითხვას იგივე პრობლემა აქვს: გამომძახებელს შეუძლია წასვლა, სოკეტები და მუშები კი დაკავებული დარჩეს.

გაუქმება მიჰყვება კლიენტის იმპლემენტაციას და გასუფთავების გზას. ის არ გპირდებათ, რომ ყოველი დაბალი დონის მოქმედება ზუსტ ინსტრუქციაზე გაჩერდება. მიეცით ამ გზას დასრულების საშუალება და გაათავისუფლეთ ოპერაციის საკუთრებაში არსებული რესურსები. დიზაინში ჩართეთ ცალკე კონტროლირებადი სხეულის წაკითხვა; თანამედროვე .NET ResponseHeadersRead ოპერაციისთვის გაატარეთ იგივე ტოკენი სხეულის წაკითხვის გავლით. სხვა კლიენტები გვთავაზობენ საკუთარ გაუქმების, შეწყვეტის და გასუფთავების ინტერფეისებს.

განმეორებით მცდელობას წინა მცდელობის შედეგი სჭირდება. შეინახეთ მისი იდენტიფიკატორი და არჩეული პროქსი, მოითხოვეთ გაუქმება საჭიროებისას და მოერიდეთ დავალების დაკარგვას ჩამნაცვლებლების უსასრულოდ დაწყებისას. წინააღმდეგ შემთხვევაში ნელი საბოლოო წერტილი უფრო სწრაფად დააგროვებს სამუშაოს, ვიდრე აპლიკაცია ათავისუფლებს.

დისტანციური შედეგი ცალკე დამუშავებას მოითხოვს. შესაძლებელია დანიშნულებამ უკვე მიიღო გაგზავნა, როცა გაუქმება ხდება. გამოიყენეთ აპლიკაციის აღდგენის ან idempotency პოლიტიკა; ლოკალური მუშაობის შეჩერება დისტანციურ მოქმედებას არ აუქმებს.

დაკავშირებული სტატიები