.NET HttpClient sarlavhalari va tanasi uchun bitta CancellationToken ishlating
So'rovning CancellationToken qiymatini HttpClient javobini tayyorlashda ham, tanani o'qishda ham uzating; faqat chaqiruvchining kutishini o'lchash bilan cheklanmang.
HTTP so'rovi davom etayotganda sekundomer kutishni to'xtatishi mumkin. Proksi urinishining belgilangan vaqt byudjeti bo'lsa, bekor qilishni amalning o'ziga bering.
Allaqachon proksi uchun sozlangan HttpClientga ega zamonaviy .NET ilovasi uchun:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(5));
using var response = await client.GetAsync(
targetUrl,
HttpCompletionOption.ResponseHeadersRead,
budget.Token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(budget.Token);
Xuddi shu byudjet tayyorlashdan oldin boshlanadi va tana o'qilayotganda ham amal qiladi. ResponseHeadersRead sarlavhalardan keyin boshqaruvni qaytaradi, shuning uchun HttpClientning o'z taym-auti keyingi tana o'qish byudjetini o'zi belgilamaydi.
Bekor qilishni HTTP holati va transport xatolaridan ajratib turing. OperationCanceledException berilgan tokendan yoki boshqa sozlangan taym-autdan kelishi mumkin; har bir muvaffaqiyatsizlikni o'lik proksi deb e'lon qilish o'rniga tegishli bekor qilish manbasini tekshiring.
Ushbu proksi yo'liga egalik qiluvchi klientni qayta ishlating. Bitta urinishni bekor qilish har bir keyingi so'rov uchun butun ulanishlar hovuzini qayta qurishni anglatmaydi.
Misol chekli o'lchamdagi javob tanasini buferlaydi. Oqimli yuklab olishda tokenni oqim nusxalash siklidan o'tkazish va har bir chiqish yo'lida javobni bo'shatish kerak.
Bekor qilish amal siyosatini ifodalaydi, har bir platforma harakati uchun aniq soat va'dasi emas. Uni Task.IsCompleted bo'yicha cheksiz so'rov sikl bilan almashtirmang.