【发布时间】:2016-12-09 14:11:35
【问题描述】:
我是客户,使用服务。
我调用异步工作的服务方法。这意味着该方法立即返回一些标识符(id),然后我应该定期通过这个 id 检查任务是否完成。比如 service 提供了三种方法:
service.startTask(someData) //starts task and returns its id
service.isTaskFinished(taskId) // checks is task finished
service.getTaskResult(taskId) //returns task results
我需要在java中实现方法,启动任务,等待任务完成,然后返回任务结果。我能想象的唯一解决方案是:
...
public Object invokeAsyncTaskAndGetResults(int someData) {
int taskId = service.startTask(someData);
int sleepTime = 1000;
int maxCheckCount = 5;
boolean hasResults = false;
int i = 1;
while (i <= maxCheckCount && !hasResults) {
hasResults = service.isTaskFinished(taskId );
i++;
Thread.sleep(sleepTime);
}
if (!hasResults)
throw new NotResultEcxeption(); //for exapmle, throw exception if task was not finished
Object result = service.getTaskResult(taskId);
return result;
}
...
我想请教您:这种模式解决方案可以吗?使用 Thread.sleep() 定期检查任务结果是一种好习惯吗?或者您可以建议一些框架以获得更好的解决方案?
【问题讨论】:
标签: java asynchronous design-patterns service