【问题标题】:completion of functions annoted with @Async完成带有@Async 注释的函数
【发布时间】:2014-05-06 12:41:47
【问题描述】:

我正在从 spring-mvc 控制器调用异步函数。

@Async
public void doSomething()
{
    ....
}

我只是从控制器方法调用这个函数

@RequestMapping(/person)
@ResponseBody Person returnPerson()
{
    service.doSomething();
}

函数 returnPerson 按预期返回。但是我想返回DeferredResult 来表示returnPerson 的完成。

@RequestMapping(/person)
@ResponseBody DeferredResult<Person> returnPerson()
{
    service.doSomething();
}

我认为要做到这一点,我应该知道 deSomething 何时完成执行,以便我可以将响应返回给调用者。我不知道我怎么知道 doSomething 何时完成执行,然后我如何基于此返回 DeferredResult

【问题讨论】:

  • 你的doSomething实际上是做什么的?如果它不相关并且您不需要结果,那么没关系。如果你这样做,它应该返回一个DeferredResult 或者它不应该是异步的。
  • doSomething() 异步上传文件,我只需要在 deferreddresult 中返回状态响应
  • 然后将其作为某种DeferredResult&lt;StatusResponse&gt; 状态从doSomething() 返回 - 您通常只想在明确不关心响应的情况下执行异步操作。

标签: java spring-mvc asynchronous synchronization


【解决方案1】:

@Async 注解方法可以返回一个 Future 对象。当您在 Future 上调用 get 时,它将阻塞,直到从它返回的 @Async 方法完成。

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 2021-05-22
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2021-07-08
    相关资源
    最近更新 更多