我正在使用 Google Vision API asyncBatchAnnotateFilesAsync 使用 Java 解析大型 PDF 现在我想每 1 秒轮询一次请求,以使用 getMetadata() 方法检查异步注释请求的当前状态,以进行长时间运行的操作异步调用。
如果我打印(response.GetMetadat()),我会得到以下输出: [状态=待处理,信息=[inputFuture=[com.google.api.core.AbstractApiFuture$InternalSettableFuture@ac76b42[状态=待处理]],函数=[com.google.api.core.ApiFutures$ApiFunctionToGuavaFunction@268aa98c]]]
但我只想捕获 getMetadata() 的状态 (status=PENDING) 部分。我不确定应该在 Java 中声明什么变量数据类型来捕获 getMetadata() 的输出,以便我可以解析它以获取“状态”
OperationFuture.getMetadata()
提供 isDone()
方法来检查批处理作业是否完成。如果作业已完成,该方法返回(布尔值) true
;如果作业正在运行,则返回 false
。作业完成可能是由于正常终止、异常或取消。请参阅下面的代码示例。
while(!response.getMetadata().isDone()){
System.out.println("In Progress...");
TimeUnit.SECONDS.sleep(1); // One second delay
}
但是,如果你想解析返回的protobuf消息,可以使用
toString()
方法。 response.getMetadata().toString()
的输出是一个字符串,可以检查 PENDING
是否作为子字符串存在。
while(response.getMetadata().toString().contains("PENDING")) // Checking if the job is in the pending state.
{
System.out.println("In Progress...");
TimeUnit.SECONDS.sleep(1); // One second delay
}
if(response.getMetadata().toString().contains("SUCCESS"))
{
System.out.println("\nProcess Done!");
}
if(response.getMetadata().toString().contains("FAILURE"))
{
System.out.println("\nProcess Failed!");
}