क्या कोई कोटलिन C# के कार्य.कब सभी?

मैं नीचे दिए गए कोड के साथ आया, लेकिन मुझे आश्चर्य है कि क्या whenAll लिखना संभव है ताकि यह केवल एक बार निलंबित हो।

fun main(args: Array<String>) = runBlocking {
    println("Start")
    val serviceA = KotlinServiceA()
    val serviceB = KotlinServiceB()

    val deferredA = async(CommonPool) { serviceA.operationA() }
    val deferredB = async(CommonPool) { serviceB.operationB() }

    var tasks = arrayOf(deferredA, deferredB)
    tasks.whenAll()

    println("End")
}

suspend fun Array<Deferred<Unit>>.whenAll() : Unit {
    for (task in this) {
        task.await()
    }
}
4
NeddySpaghetti 14 अक्टूबर 2018, 08:57

1 उत्तर

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

एक awaitAll() फ़ंक्शन है जो काम करता है।

val deferredArray: Array<Deferred<Unit>>  =  arrayOf()
val awaitAllArray = awaitAll(*deferredArray)

यदि आप Collection के साथ काम करते हैं तो आप awaitAll() एक्सटेंशन फ़ंक्शन का उपयोग कर सकते हैं

val deferredList: List<Deferred<Unit>>  =  listOf()
val awaitAllList = deferredList.awaitAll()
6
Rene 14 अक्टूबर 2018, 06:53