कुछ अच्छे संकेत हैं कि वायदा with timeouts कैसे गठबंधन करें। हालांकि मैं कैसे भविष्य अनुक्रम sequenceOfFuturesस्कैला भविष्य अनुक्रम और टाइमआउट हैंडलिंग
मेरा पहला दृष्टिकोण यह
import scala.concurrent._
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits._
object FutureSequenceScala extends App {
println("Creating futureList")
val timeout = 2 seconds
val futures = List(1000, 1500, 1200, 800, 2000) map { ms =>
val f = future {
Thread sleep ms
ms toString
}
Future firstCompletedOf Seq(f, fallback(timeout))
}
println("Creating waitinglist")
val waitingList = Future sequence futures
println("Created")
val results = Await result (waitingList, timeout * futures.size)
println(results)
def fallback(timeout: Duration) = future {
Thread sleep (timeout toMillis)
"-1"
}
}
तरह लग रहा है वहाँ वायदा के एक क्रम में समय समाप्ति को संभालने के लिए एक बेहतर तरीका है के साथ ऐसा करना उत्सुक हूँ या यह एक है वैध समाधान?
जिज्ञासा के रूप में, 'हैशहेल टिमर' 'टाइमरटास्क 'या' नया शेड्यूलड थ्रेडपूल एक्स्सेलर 'से अधिक कुशल कैसे है? दोनों एक ही काम करते हैं। – Jatin
@ जतिन, मुझे लगता है कि आप अधिक जानकारी के लिए इस लिंक को देख सकते हैं: http://stackoverflow.com/questions/15347600/which-is-more- कुशल-nettys-hashedwheeltimer-or-quartzs-scheduler। लेकिन इसके दिल में, अधिक कार्यों को जोड़ने से अधिक संसाधनों का उपभोग नहीं करना चाहिए। यह एक अधिक स्थिर समय (खपत प्रणाली संसाधनों के मामले में) आधारित टाइमर होना चाहिए, फिर एक 'टाइमर' और 'टाइमरटास्क' जैसा कुछ। एक उच्च थ्रूपुट सिस्टम के लिए जहां आप बहुत सारे शेड्यूलिंग करेंगे और बहुत कम समय के लिए टाइमआउट आधारित कार्यों का निर्धारण करेंगे, निरंतर संसाधन उपयोग दावों के कारण यह एक बेहतर समाधान है। – cmbaxter
लेकिन 'हैशहेल्ड टिमर' की तुलना में 'कोरसेज' '1' के साथ' STPE' कैसे अधिक संसाधनों का उपभोग करता है? मुझे खेद है लेकिन मुझे यह नहीं मिला। 'एसटीपीई' में आंतरिक ढेर 'ओ (लॉग (एन)) के कारण अधिक सम्मिलन समय है, लेकिन कम टिक टाइम। क्या आप – Jatin