Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java net HttpClient:在异步调用中响应超时_Java_Timeout_Java Http Client - Fatal编程技术网

Java net HttpClient:在异步调用中响应超时

Java net HttpClient:在异步调用中响应超时,java,timeout,java-http-client,Java,Timeout,Java Http Client,我的目标是在HttpClient的异步调用中响应超时。我找到了许多关于如何设置不同超时的信息,但没有找到任何关于如何在超时发生时作出反应的信息 文件规定: 如果在指定的超时内未收到响应,则会从HttpClient::send或HttpClient::sendAsync引发HttpTimeoutException,并以HttpTimeoutException异常完成 但我不知道确切地说是什么意思 例子 在同步调用中,我可以执行以下操作(如果测试URL后面的服务器没有应答): 我现在想对异步调用做同

我的目标是在HttpClient的异步调用中响应超时。我找到了许多关于如何设置不同超时的信息,但没有找到任何关于如何在超时发生时作出反应的信息

文件规定:

如果在指定的超时内未收到响应,则会从HttpClient::send或HttpClient::sendAsync引发HttpTimeoutException,并以HttpTimeoutException异常完成

但我不知道确切地说是什么意思

例子 在同步调用中,我可以执行以下操作(如果测试URL后面的服务器没有应答):

我现在想对异步调用做同样的反应,如:

HttpRequest request = HttpRequest.newBuilder()
                                 .uri(new URI("http://localhost:8080/api/ping/public"))
                                  .timeout(Duration.ofSeconds(2))
                                  .build();
HttpClient client = HttpClient.newBuilder().build();

client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream()).thenIfTimeout(System.out.println());

最后一个调用只是对超时的反应的占位符,不存在。但是如何存档此文件?

根据您尝试执行的操作,在发生异常时,您至少可以使用三种方法来执行操作:

    • 允许您在发生异常时返回相同类型的结果
    • 允许您触发某些操作,但不会更改完成 结果或例外
    • 允许您触发某些操作,并更改完成的类型 结果或例外
    到目前为止,最简单的方法是使用。比如:

    client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream())
          .whenComplete((r,x) -> {
                if (x instanceof HttpTimeoutException) {
                     // do something
                }
           });
    
    “我不知道exacly”是什么意思:它的意思是抛出一个异常,正如你部分引用的句子所明确指出的那样。
    client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream())
          .whenComplete((r,x) -> {
                if (x instanceof HttpTimeoutException) {
                     // do something
                }
           });