مهلت را به عملیاتی بدهید که می‌تواند کار شبکه را لغو کند. برای یک .NET HttpClient موجود که از طریق پروکسی پیکربندی شده است:

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

برنامه client و uri را تأمین می‌کند. این بارگذاری بیش‌ازحد توکن لغو را دریافت می‌کند؛ مهلتی پیرامون انتظار برای وظیفه‌اش فقط انتظار همان فراخوان را محدود می‌کند. بررسی دوره‌ای یک پرچم تکمیل هم همین مشکل را دارد: فراخوان می‌تواند برود در حالی که سوکت‌ها و کارگرها مشغول می‌مانند.

لغو از پیاده‌سازی کلاینت و مسیر پاک‌سازی پیروی می‌کند. تضمین نمی‌کند که هر اقدام سطح پایین‌تر در یک دستور دقیق متوقف شود. بگذارید آن مسیر تمام شود و منابعی را که عملیات مالک آن است آزاد کنید. خواندن بدنه را که جداگانه کنترل می‌شود در طراحی بگنجانید؛ برای یک عملیات مدرن .NET ResponseHeadersRead، همان توکن را از خواندن بدنه عبور دهید. کلاینت‌های دیگر رابط‌های لغو، توقف و پاک‌سازی خودشان را ارائه می‌دهند.

تلاش مجدد به یک نتیجه برای تلاش قبلی نیاز دارد. شناسه و پروکسی انتخاب‌شده‌اش را نگه دارید، در صورت نیاز لغو بخواهید و از گم کردن وظیفه هنگام شروع بی‌پایان جانشین‌ها بپرهیزید. در غیر این صورت یک نقطه پایانی کند می‌تواند کار را سریع‌تر از آزادسازی برنامه انباشته کند.

نتیجه دور به رسیدگی جداگانه نیاز دارد. ممکن است مقصد هنگام لغو، قبلاً ارسالی دریافت کرده باشد. از سیاست بازیابی یا یکتاسازی برنامه استفاده کنید؛ توقف کار محلی یک اقدام دور را باطل نمی‌کند.

مقالات مرتبط