一个协程超时,Kotlin

qrjkbowd  于 2023-08-06  发布在  Kotlin
关注(0)|答案(1)|浏览(138)

我正在使用Kotlin在Android客户端和服务器之间创建UDP套接字。对于接收消息,我使用了一个协程,代码本身工作正常,检查每个传入的消息。
我现在的目标是设置一个30秒的超时(或类似的东西)来检测通信是否丢失。如果达到了超时,我不希望循环阻塞;我想让它继续接收任何传入的消息。我只想在吐司中记录或显示适当的消息。

val myCoroutineScope = lifecycleScope

    if (myCoroutineJob == null || myCoroutineJob?.isCompleted == true) {
        // Connection to the server
        myCoroutineScope.launch {
            withContext(Dispatchers.IO) {
                client = Client()
            }

            // A listener function is created, it is used to handle the data as needed
            client?.dataReceivedListeners?.add { data ->

                try {
                    receivedText = decompress(data)

                    val jsonObject = JSONObject(receivedText.toString())

                    # RECEIVED MESSAGES HANDLING....

                    }

                } catch (e: JSONException) {
                    # ERROR HANDLING ........

                }

            }

        }
    }

字符串

ffscu2ro

ffscu2ro1#

您可以使用withTimeoutOrNull来实现此目的。请注意,它是一个挂起函数。它可以这样使用:

val value = withTimeoutOrNull(5000) {
    // ... long running operation
    "Hello"
}

字符串
如果超时超过5000ms,则值将为“Hello”或null

相关问题