Kotlin में टास्क शेड्यूलर: पूरी गाइड
टास्क शेड्यूलर एक शक्तिशाली टूल है जो आपको निश्चित समय या नियमित अंतराल पर विशिष्ट कार्यों को स्वचालित (ऑटोमेट) करने की सुविधा देता है। Kotlin भाषा, जिसका उपयोग सर्वर एप्लिकेशन, Android ऐप और स्क्रिप्ट बनाने में किया जाता है, में टास्क शेड्यूलर को लागू करने के कई तरीके हैं। इस लेख में हम मुख्य दृष्टिकोणों, उनके फायदों और व्यावहारिक कोड उदाहरणों पर विस्तार से चर्चा करेंगे।
टास्क शेड्यूलर की आवश्यकता क्यों है?
टास्क शेड्यूलर डेवलपमेंट में कई सामान्य समस्याओं का समाधान करता है:
- स्वचालित नोटिफिकेशन भेजना (ईमेल, पुश नोटिफिकेशन) एक निर्धारित समय पर।
- अस्थायी डेटा साफ करना (कैश, यूज़र सेशन) दिन में एक बार।
- बाहरी API या डेटाबेस के साथ नियमित सिंक्रोनाइज़ेशन करना।
- Android ऐप में बैकग्राउंड कार्य (WorkManager) निष्पादित करना।
- बैकअप और रिपोर्ट शेड्यूल करना।
Kotlin में टास्क शेड्यूलर लागू करने के मुख्य तरीके
हम तीन सबसे लोकप्रिय दृष्टिकोणों पर विचार करेंगे: कोरूटीन (Coroutines), क्लासिक Timer और Java का ScheduledExecutorService। प्रत्येक की अपनी विशेषताएं हैं।
1. Kotlin कोरूटीन-आधारित टास्क शेड्यूलर
कोरूटीन Kotlin में एसिंक्रोनस कार्यों के लिए एक आधुनिक और कुशल तरीका है। टास्क शेड्यूलर बनाने के लिए कोरूटीन के अंदर delay() फंक्शन का उपयोग करना पर्याप्त है। यह तरीका हल्का है, थ्रेड को ब्लॉक नहीं करता है और सरल कार्यों के लिए आदर्श है।
import kotlinx.coroutines.*
fun main() = runBlocking {
println("शेड्यूलर शुरू। कार्य 3 सेकंड में निष्पादित होगा।")
// देरी के साथ कार्य शेड्यूल करें
val job = launch {
delay(3000L) // 3 सेकंड
println("कार्य पूरा हुआ: समय समाप्त!")
}
// कार्य पूरा होने की प्रतीक्षा करें
job.join()
println("प्रोग्राम समाप्त।")
}
दोहराए जाने वाले कार्यों के लिए कोरूटीन के अंदर लूप का उपयोग करें:
import kotlinx.coroutines.*
fun main() = runBlocking {
println("कार्य हर 2 सेकंड में 5 बार निष्पादित होगा।")
val job = launch {
repeat(5) { iteration ->
delay(2000L)
println("निष्पादन #${iteration + 1}: ${System.currentTimeMillis()}")
}
}
job.join()
println("सभी शेड्यूल किए गए कार्य पूरे हो गए।")
}
2. क्लासिक Timer (Java/Kotlin)
java.util.Timer एक सरल और कई डेवलपर्स से परिचित तरीका है। यह देरी और आवधिकता के साथ कार्यों को शेड्यूल करने की अनुमति देता है। हालांकि, ध्यान रखें कि Timer एक ही थ्रेड का उपयोग करता है, और यदि कोई कार्य लंबा चलता है, तो यह बाद के कार्यों में देरी कर सकता है।
import java.util.*
fun main() {
val timer = Timer()
// 2 सेकंड की देरी के साथ कार्य शेड्यूल करें
timer.schedule(object : TimerTask() {
override fun run() {
println("कार्य 2 सेकंड बाद निष्पादित हुआ।")
}
}, 2000L)
// 1 सेकंड बाद शुरू होने वाला और हर 1.5 सेकंड पर दोहराया जाने वाला कार्य
timer.schedule(object : TimerTask() {
override fun run() {
println("दोहराया जाने वाला कार्य: ${System.currentTimeMillis()}")
}
}, 1000L, 1500L)
// कार्यों को निष्पादित होने का समय दें
Thread.sleep(5000L)
timer.cancel()
println("Timer रोक दिया गया।")
}
3. ScheduledExecutorService (मल्टी-थ्रेडेड वातावरण के लिए अनुशंसित)
Java का java.util.concurrent पैकेज का यह क्लास अधिक लचीली सुविधाएं प्रदान करता है: थ्रेड पूल, एक्सेप्शन हैंडलिंग और कार्यों को रद्द करना। यह गंभीर प्रोजेक्ट्स में Timer से बेहतर है।
import java.util.concurrent.*
fun main() {
val scheduler = Executors.newScheduledThreadPool(2)
// 3 सेकंड की देरी वाला कार्य
val task1 = scheduler.schedule({