मेरे पास Futures
का एक सेट है जो Callable
s को Executor
पर सबमिट करके बनाया गया है। छद्म कोड:फ्यूचर्स के बैच को पूरा करने के लिए प्रतीक्षा करते समय टाइमआउट?
for all tasks
futures.add(executor.submit(new callable(task)))
अब मैं सभी पूर्ण होने तक सभी एनयूटर इंतजार करना चाहता हूं। मुझे पता है कि मैं Future#get(timeout)
पर कॉल कर सकता हूं लेकिन अगर मैं लूप में अपने सभी वायदा के लिए अनुक्रमिक रूप से कॉल करता हूं तो टाइम्सआउट जोड़ना शुरू हो जाता है। छद्म कोड:
for all futures
future.get(timeout)
get
परिणाम जब तक समय समाप्त के साथ ब्लॉक तैयार है। इसलिए, यदि पहली बार टाइमआउट से पहले पूरा हो जाता है और दूसरा टाइमआउट से पहले भी पूरा हो जाता है और इसलिए पूरे निष्पादन समय पर number of futures * timeout
timeout
के बजाय सबसे अधिक है।
इसलिए, मैं एक ऐसी विधि की तलाश में हूं जो Future
एस और एक टाइमआउट की सूची स्वीकार करता है, सभी समानांतर में चलता है और फिर भविष्य के परिणामों का संग्रह देता है। कोई विचार?
यह पूरी तरह से स्पष्ट नहीं है। आप उन कार्यों के साथ क्या करना चाहते हैं जो टाइमआउट की समयसीमा समाप्त होने पर पूरा नहीं हुआ है? क्या आप चाहते हैं कि उन्हें रद्द किया जाए या जारी रखने की अनुमति दी जाए? –
उन्हें रद्द किया जाना चाहिए। इसके अलावा, किसी भी तरह मुझे यह जानने की जरूरत है कि कौन से लोग पूरा हुए और कौन नहीं। मुझे लगता है कि मैं वायदा पर एक बार फिर से उत्साहित हो सकता हूं और उन सभी पर 'isDone' का आह्वान कर सकता हूं। –