Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Kotlin协同程序中嵌入此事件处理程序函数的最佳方式是什么?_Kotlin_Telegram Bot_Kotlin Coroutines - Fatal编程技术网

在Kotlin协同程序中嵌入此事件处理程序函数的最佳方式是什么?

在Kotlin协同程序中嵌入此事件处理程序函数的最佳方式是什么?,kotlin,telegram-bot,kotlin-coroutines,Kotlin,Telegram Bot,Kotlin Coroutines,我目前正在尝试添加一个协程流,以控制超时,。。。并支持简单的多线程处理 以下解决方案实际上不起作用 //从'com.elbekD.bot'导入` 公用命令(命令:字符串,操作:挂起(消息,字符串?->Unit) 我在用这个电报机器人图书馆 fun startBotCommandFlow(操作:(参数:字符串?->Unit){ val超时=600000升 val smsFlow:流量=流量{ bot.onCommand(command=“/test”,action={\ux,opts-> wit

我目前正在尝试添加一个协程流,以控制超时,。。。并支持简单的多线程处理

以下解决方案实际上不起作用

//从'com.elbekD.bot'导入`
公用命令(命令:字符串,操作:挂起(消息,字符串?->Unit)
我在用这个电报机器人图书馆

fun startBotCommandFlow(操作:(参数:字符串?->Unit){
val超时=600000升
val smsFlow:流量=流量{
bot.onCommand(command=“/test”,action={\ux,opts->
withContext(不可取消){
什么时候{
!opts.isNullOrEmpty()->{
sendMessage(“我将应用您的文本!”)
发射(opts)
}
其他->{
sendMessage(“收到非文本或无效文本!请重试”)
}
}
}
})
}
环球镜发射{
bot.start()
withContext(Dispatchers.IO){
试一试{
//设置10分钟超时
withTimeout(超时){
sendMessage(“请粘贴您的文本(\”/test\”)
smsFlow.collect{value->
println(“收到的美元价值”)
行动(价值)
}
}
}捕获(例如:超时取消异常){
val errorMsg=“机会已过期!”
发送消息(errorMsg)
log.error(errorMsg)
这个。取消(errorMsg)
}最后{
这个。取消()
}
}
}.完成{
bot.close()
}
}
我还发现了一些可以通过
callbackFlow
channelFlow
解决的其他问题。 但我不知道如何正确地应用它

如果我在没有
流的情况下运行操作
,协同程序将立即完成

withTimeout(超时){
sendMessage(“请粘贴您的文本(\”/test\”)
bot.chain(“/test”){
测试动作(it.text、动作)
}.build()
调试(“监听器激活”)
}
你知道我怎样才能解决我的问题吗


提前谢谢

看起来您需要的是
callbackFlow
,而不是
flow
。关于如何使用它们还有什么不清楚的地方?@LouisWasserman我应该如何毫无例外地关闭callbackFlow?使用
testCallbackFlow.collect{delay(timeout)}
保持流打开可以吗?不,你不应该做任何事情来保持流打开。使用
等待关闭