"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية منع طلبات HTTP من الاستمرار بعد انتهاء المهلة في Goroutine؟

كيفية منع طلبات HTTP من الاستمرار بعد انتهاء المهلة في Goroutine؟

تم النشر بتاريخ 2024-11-15
تصفح:765

How to Prevent HTTP Requests from Continuing After Timeout in a Goroutine?

Goroutine Timeout

تستخدم الوظيفة المتوفرة، Find()، goroutine لإنشاء سلسلة من طلبات HTTP والتعامل مع استجاباتها. ومع ذلك، فإن القلق هو أن هذه الطلبات تستمر في الخلفية حتى إذا تجاوزت المهلة المحددة.

تسرب محتمل للغوروتين

من غير المحتمل أن يكون هناك تسرب للغوروتين في الكود. عندما ترجع وظيفة Find () مهلة، يستمر الإجراء الرئيسي ويتم التخلي عن الإجراء الأساسي في الخلفية.

إلغاء طلب HTTP

لتجنب تقديم الطلبات بعد انتهاء المهلة الحل هو استخدام context.Context لكل طلب HTTP. يسمح لك السياق بإلغاء الطلب في حالة انتهاء المهلة.

func Find() (interface{}, bool) {
  ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
  defer cancel()

  ch := make(chan Response, 1)

  go func() {
    data, status := findCicCode()
    ch  عند انتهاء المهلة، سيؤدي استدعاء Cancel () إلى إلغاء جميع طلبات HTTP التي تم إنشاؤها داخل ctx. وهذا يمنع أي معالجة إضافية أو استهلاك الموارد من خلال تلك الطلبات.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3