दस्तावेज़ीकरण, हम CoroutineName("theName") का उपयोग करके coroutine को नाम दे सकते हैं

अगर मैं इसे बिना नाम के चलाता हूं (यूनिट-टेस्ट में)

        runBlocking {
            launch { 
                println("main runBlocking pre       : ${Thread.currentThread().name}:${coroutineContext[Job]}")
                delay(500)
                println("main runBlocking post      : ${Thread.currentThread().name}:${coroutineContext[Job]}")
            }

दोनों Thread.currentThread().name और coroutineContext[Job] कोरआउटिन नाम के लिए एक आईडी असाइन करेंगे, इसलिए नीचे के रूप में प्रिंट आउट (सूचना coroutine#2)

main runBlocking pre       : main @coroutine#2:"coroutine#2":StandaloneCoroutine{Active}@39529185
main runBlocking post      : main @coroutine#2:"coroutine#2":StandaloneCoroutine{Active}@39529185

अगर मैं इसे नाम से चलाता हूं (यूनिट-टेस्ट में)

        runBlocking {
            launch(CoroutineName("CustomName")) { 
                println("main runBlocking pre       : ${Thread.currentThread().name}:${coroutineContext[Job]}")
                delay(500)
                println("main runBlocking post      : ${Thread.currentThread().name}:${coroutineContext[Job]}")
            }

यह प्रिंट होगा (@CustomName#2 पर ध्यान दें)

main runBlocking pre       : main @CustomName#2:"CustomName#2":StandaloneCoroutine{Active}@78e117e3
main runBlocking post      : main @CustomName#2:"CustomName#2":StandaloneCoroutine{Active}@78e117e3

हालांकि, अगर मैं इसे नीचे एंड्रॉइड में चलाता हूं

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        runBlocking {
            launch(CoroutineName("CustomName")) { // context of the parent, main runBlocking coroutine
                Log.d("Track", "main runBlocking pre       : ${Thread.currentThread().name}:${coroutineContext[Job]}")
                delay(500)
                Log.d("Track", "main runBlocking post      : ${Thread.currentThread().name}:${coroutineContext[Job]}")
            }
        }
    }

यह प्रिंट करता है

Track: main runBlocking pre       : main:StandaloneCoroutine{Active}@5e322c2
Track: main runBlocking post      : main:StandaloneCoroutine{Active}@5e322c2

Coroutine नाम नहीं दिया गया है, न ही coroutine असाइन की गई ID है। मैं केवल पता आईडी यानी @5e322c2 से पहचान सकता हूं, जो हमेशा एक जैसा होने की गारंटी नहीं है।

मैं एंड्रॉइड में कोरआउट नाम कैसे निर्दिष्ट कर सकता हूं?

5
Elye 25 पद 2020, 14:14
यदि आप CoroutineName तत्व चाहते हैं तो आप coroutineContext[Job] तक क्यों पहुंच रहे हैं? क्या आपने println(coroutineContext[CoroutineName]?.name) की कोशिश की है
 – 
Adrian K
25 पद 2020, 22:21

1 उत्तर

सबसे बढ़िया उत्तर

कोरआउट नाम का उपयोग केवल डिबगिंग मोड में किया जाता है। हालाँकि, आप अपने आवेदन में सक्षम कर सकते हैं:

System.setProperty("kotlinx.coroutines.debug", "on" )
1
Diniz 25 पद 2020, 16:07