已解决 Mirai如何实现延时执行?
-
机器人发消息是秒发,想让他更像人一样,延迟一下再发,然后我就想到了Thread.sleep
但是因为Thread.sleep是暂停线程,我怕导致其他问题,所以请教一下大家,有什么好方法能达到延迟执行的目的吗?
我本人开发使用语言是java,同时也欢迎Kotlin大佬来回答
-
@michael1015198808 事件的执行共享 Kotlin 协程的全局线程池(可能有 64 个线程)。协程运行在线程中,少数协程的阻塞不会影响全局。但这些线程如果全部阻塞,将会导致不可确定的异常情况。建议使用专用的适合于 Java 的调度方式来进行延迟。
-
TimerTask?
-
java的话可能只能自己使用多线程或者是定时任务库来解决,如果是kotlin可以使用delay来延迟协程
-
我是用Kotlin开发的,专门瞄了一眼Java的示例代码。
eventChannel.subscribeAlways
的本质是注册了一个回调,每当特定事件发生时,启动一个协程来运行这个回调函数。
因此,Thread.sleep
只是暂停这个协程,应该不会影响后续消息到来触发回调 -
@michael1015198808 事件的执行共享 Kotlin 协程的全局线程池(可能有 64 个线程)。协程运行在线程中,少数协程的阻塞不会影响全局。但这些线程如果全部阻塞,将会导致不可确定的异常情况。建议使用专用的适合于 Java 的调度方式来进行延迟。