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

كيفية الانتظار بكفاءة لقائمة العقود الآجلة والتعامل مع الاستثناءات؟

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

How to Efficiently Wait for a List of Futures and Handle Exceptions?

الانتظار بكفاءة على قائمة العقود الآجلة

عند التعامل مع قائمة العقود الآجلة، فإن الهدف هو الانتظار حتى الانتهاء أو حدوث استثناء في أي مستقبل. يمكن أن يؤدي النهج الساذج الذي يتضمن استدعاءات فردية لـ f.get() إلى انتظار غير ضروري في حالة حدوث استثناء مبكرًا.

تجنب الانتظار غير الضروري مع خدمة CompletionService

لمعالجة هذا المشكلة، يتم تشغيل فئة CompletionService. فهو يسمح بتنفيذ المهام غير المتزامنة واسترداد نتائجها بطريقة آمنة عندما تصبح متاحة. وإليك كيفية استخدامه:

Executor executor = Executors.newFixedThreadPool(4);
CompletionService completionService = new ExecutorCompletionService(executor);

// Submit tasks to the service
for (int i = 0; i () {
        @Override
        public SomeResult call() {
            // Task logic here
            return result;
        }
    });
}

int received = 0;
boolean errors = false;

// Loop until all tasks are complete or an error occurs
while (received  resultFuture = completionService.take(); // Blocks if nothing available
    try {
        SomeResult result = resultFuture.get();
        received  ;
        // Process result here
    } catch (Exception e) {
        // Log error
        errors = true;
    }
}

// Consider canceling remaining tasks if an error occurred

باستخدام نهج CompletionService، يمكنك مراقبة اكتمال المهام في الوقت الفعلي وإيقاف المزيد من المعالجة في حالة حدوث خطأ، وبالتالي تجنب الانتظار غير الضروري.

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

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

Copyright© 2022 湘ICP备2022001581号-3