MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接

    Solved Mirai如何实现延时执行?

    开发交流
    5
    5
    570
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Enron233
      Enron233 last edited by

      机器人发消息是秒发,想让他更像人一样,延迟一下再发,然后我就想到了Thread.sleep
      但是因为Thread.sleep是暂停线程,我怕导致其他问题,所以请教一下大家,有什么好方法能达到延迟执行的目的吗?


      我本人开发使用语言是java,同时也欢迎Kotlin大佬来回答

      1 Reply Last reply Reply Quote 0
      • Him188
        Him188 @Michael1015198808 last edited by Him188

        @michael1015198808 事件的执行共享 Kotlin 协程的全局线程池(可能有 64 个线程)。协程运行在线程中,少数协程的阻塞不会影响全局。但这些线程如果全部阻塞,将会导致不可确定的异常情况。建议使用专用的适合于 Java 的调度方式来进行延迟。

        1 Reply Last reply Reply Quote 1
        • Nekoer
          Nekoer 摸鱼 last edited by

          TimerTask?

          1 Reply Last reply Reply Quote 0
          • RainChan
            RainChan 摸鱼 last edited by

            java的话可能只能自己使用多线程或者是定时任务库来解决,如果是kotlin可以使用delay来延迟协程

            1 Reply Last reply Reply Quote 0
            • M
              Michael1015198808 last edited by

              我是用Kotlin开发的,专门瞄了一眼Java的示例代码。
              eventChannel.subscribeAlways的本质是注册了一个回调,每当特定事件发生时,启动一个协程来运行这个回调函数。
              因此,Thread.sleep只是暂停这个协程,应该不会影响后续消息到来触发回调

              Him188 1 Reply Last reply Reply Quote 0
              • Him188
                Him188 @Michael1015198808 last edited by Him188

                @michael1015198808 事件的执行共享 Kotlin 协程的全局线程池(可能有 64 个线程)。协程运行在线程中,少数协程的阻塞不会影响全局。但这些线程如果全部阻塞,将会导致不可确定的异常情况。建议使用专用的适合于 Java 的调度方式来进行延迟。

                1 Reply Last reply Reply Quote 1
                • 1 / 1
                • First post
                  Last post
                Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact