当前位置: 首页 > 知识库问答 >
问题:

我不需要等待,直到执行async方法调用()[重复]

叶弘深
2023-03-14

我需要做一些异步方法。不要等到它执行。我尝试未来,但它没有帮助。

Future<Boolean> future = executorService.submit(new MyCallable());
LOGGER.info("onFailedLogonLimitAttempt: before");
                        if (future.get().booleanValue()) {
                          // some code here
                        }
                        LOGGER.info("onFailedLogonLimitAttempt: after");

public class MyCallable implements Callable<Boolean> {

        // The call() method is called in order to execute the asynchronous task.
        @Override
        public Boolean call() throws Exception {
            try {
                LOGGER.info("MyCallable: start");
                Thread.sleep(10000L);
                LOGGER.info("MyCallable: alarm_cleanup_stop 10 seconds");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
            return true;
        }
    }

但这里记录:

2022-03-24 17:28:55.436 INFO  [SomeClass:http-nio-172.19.5.163-8091-exec-10] onFailedLogonLimitAttempt: before
2022-03-24 17:28:55.436 INFO  [SomeClass:pool-24-thread-1] MyCallable: start
...
...
...
2022-03-24 17:29:05.437 INFO  [SomeClass:pool-24-thread-1] MyCallable: alarm_cleanup_stop 10 seconds
2022-03-24 17:29:05.441 INFO  [SomeClass:http-nio-172.19.5.163-8091-exec-10] onFailedLogonLimitAttempt: after

正如您所见,日志打印“onFailedLogonSimulation:after”是在10秒后调用的。但我需要日志在“OnFailedLogonSimulation:before”之后每天打印。不等待单元异步方法调用完成。

共有1个答案

訾旭
2023-03-14

调用future时主线程被阻塞。get()直到任务完成。删除此调用,您的第二条日志语句将立即打印。

这正好符合你的要求。但我怀疑这是你想要的。

提交异步任务的目的是允许主线程立即进行其他工作,如果主线程要求任务的结果继续进行,则该任务不是异步执行的候选。

相反,将结果的处理添加到异步任务本身。然后主线程不必等待结果。

 类似资料:
  • 我需要做一些异步方法。不要等到它执行。我尝试未来,但它没有帮助。 但这里的日志: 正如您所见,日志打印“onFailedLogonSimulation:after”是在10秒后调用的。但我需要日志在“OnFailedLogonSimulation:before”之后每天打印。不等待单元异步方法调用完成。

  • 我有一组从基类继承的命令。基类有以下声明: 此异步方法缺少“await”运算符,将同步运行。考虑使用'await'运算符来等待非阻塞API调用,或者使用'await task.run(...)'在后台线程上执行CPU绑定的工作。 显式提供任务完成返回值是否正确?

  • 我正在使用Jasmine 2.0和require.js。当我将异步代码放入beforeach函数中时,我无法使异步测试正常工作。在异步调用完成之前,我的it语句仍在运行。 这是我的规格: 当我在it中包含异步时,第一个规范失败,但第二个规范通过。 理想情况下,我希望异步之前的

  • 问题内容: 我在Python 2.7中使用selenium,并且有以下代码,但是我正在寻找一种更有效的方法: 问题答案: 您无需使用一段时间。它已经等待您在WebDriverWait()函数中显示的时间。

  • 问题内容: 我想知道退出程序之前等待go例程完成的正确方法是什么。阅读其他答案,看来bool chan可以解决问题,就像在Playground链接中一样 我在这里有两个问题: 为什么<-完成的作品完全可以? 如果我取消最后一行的注释会怎样?我有一个死锁错误。这是因为通道为空,并且没有其他函数向其发送值吗? 问题答案: 为何一切正常? 之所以有效,是因为运行时检测到您正在向其他地方的通道写入内容。

  • 本文向大家介绍PHP ajax 异步执行不等待执行结果的处理方法,包括了PHP ajax 异步执行不等待执行结果的处理方法的使用技巧和注意事项,需要的朋友参考一下 短地址生成应用中,要根据长地址生成网页快照,这个生成时间非瞬发,不可预估。 所以前台方面采用的方案一般为先展示生成的短地址,再定期AJAX轮查网页快照是否生成完毕。 So,PHP代码这里做了如下处理: 前台Js的ajax脚本: 回调函数