【问题标题】:Java Future vs c# async awaitJava Future vs c# 异步等待
【发布时间】:2021-03-18 04:54:32
【问题描述】:

我是一名 c# 开发人员,现在开始过渡到 Java...并开始比较功能

我在 Java 并发中遇到了这个 Future https://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html 根据文档示例,它说 即使支付处理器需要很长时间,客户端也可以继续工作,并在处理最终完成时显示结果。

所以我们可以假设 Future 与 c# async await 相同。如果不是,请让我知道区别...

根据我的知识同步,等待我在移动操作中使用过 不希望 UI 线程在与 api 或服务交互时被阻塞。

【问题讨论】:

  • 不,Java 语言没有像 C# 中的异步等待这样的功能。

标签: java c#-4.0 asynchronous


【解决方案1】:

Future 只是一个接口。它本身无法异步处理任何事情。当您在ExecutorService 中提交一些要异步执行的工作时,您会收到一个Future 对象。使用Future.get() 阻塞当前线程,直到结果准备好。当然,在提交工作和尝试获得结果之间,您应该在当前线程中做一些有用的事情。

【讨论】:

  • 如果它阻塞了主线程,那么调用怎么会变成异步的。如果我错了,请纠正我..
  • 并且文档说“客户端可以继续工作,并在处理最终完成时显示结果”
  • 调用只是异步的,因为当你把工作(Callable)交给一个ExecutorService时,它会在另一个线程中执行。
【解决方案2】:

Java Future 不等同于 C# async/await。简单地说,它是可以在主线程中等待的异步任务(在不同的线程中运行)的结果。 当调用返回 Future 的方法时,该方法将在不同的线程中执行,当调用者线程需要结果时,您可以使用 Future.get() 阻塞该线程。

虽然 C# async/await 并不意味着使用不同的线程。它只是挂起封闭方法并将执行返回给调用者方法,这两个方法可以在同一个线程中执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    相关资源
    最近更新 更多