gpt4 book ai didi

java - 在java中进行解锁调用

转载 作者:行者123 更新时间:2023-11-30 05:04:29 25 4
gpt4 key购买 nike

我正在调用外部 api 来获取报告状态,一旦我的报告状态完成,那么我应该继续获取结果到目前为止我所做的是添加 sleep ,但它是一个阻塞调用,并且报告需要大约半个小时小时完成。所以我需要一种方法来解除我下一步的障碍。谁能建议我如何实现这一目标?

 String reportStatus = client.ReportStatus(jobId).getStatus();
while(reportStatus != "Completed"){
int seconds = 5;
System.out.println("Waiting:" + seconds);
try {
Thread.sleep(seconds*5);
}
catch(InterruptedException e){
System.out.println("Done");
}
reportStatus = client.ReportStatus(jobId).getStatus();

}
final FetchReportResult reportValues = client.fetchReport(jobId);

最佳答案

如果您正在寻找异步调用,则应该考虑在单独的线程上调用此函数。您可以通过创建一个线程池并告诉它为您执行此代码来完成此操作。然后代码将在后台运行,直到完成,在这种情况下,您可以用它做一些事情。然后您唯一要做的就是将其包装在 Runnable 中,并在最后与 EventQueue 同步,然后就完成了。

要执行的代码:

CallBackFunction aFunction = null;
Runnable runnable = new MyRunnable(aFunction);
ExecutorService executorService = Executors.newFixedThreadPool( 1 );
executorService.execute( runnable );

CallBackFunction接口(interface):

public interface CallBackFunction {
/**
* Function that gets called when callback is finished
*/
void callbackfinished();
}

和可运行的:

   public class MyRunnable implements Runnable {

private CallBackFunction fCallbackFunction;

public MyRunnable( CallBackFunction callbackFunction ) {
fCallbackFunction = callbackFunction;
}

@Override
public void run() {

//execute your polling code here//

if(complete){
EventQueue.invokeLater( new Runnable() {
@Override
public void run() {
fCallbackFunction.callbackfinished();
}
} );
}
}
}

当执行MyRunnable对象时,它不会阻塞正在运行的线程。相反,它将在后台线程上运行。可运行的将“轮询”服务器,就像您在代码中所描述的那样。最后,当轮询完成后,会调用CallBackFunction来通知完整性发生变化。

我希望这会有所帮助。

P.S.:我在事件队列上运行回调函数。这对于您的应用程序可能是必要的,但如果您正在执行 GUI 操作,这可能会更安全。

关于java - 在java中进行解锁调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5593849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com