我正在尝试通过新的 Java 11 HttpClient 取消 http 请求。
这是我的测试代码:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class App {
public static void main(String... args) throws InterruptedException {
HttpClient client = HttpClient.newBuilder().build();
URI uri = URI.create("http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.iso");
HttpRequest request = HttpRequest.newBuilder().uri(uri).GET().build();
var bodyHandler = HttpResponse.BodyHandlers.ofByteArrayConsumer(b -> System.out.println("#"));
var future = client.sendAsync(request, bodyHandler);
Thread.sleep(1000);
future.cancel(true);
System.out.println("\r\n----------CANCEL!!!------------");
System.out.println("\r\nisCancelled: " + future.isCancelled());
Thread.sleep(250);
}
}
Run Code Online (Sandbox Code Playgroud)
future.cancel(true);我预计,该请求任务将在调用行后立即取消。因此,控制台中最后打印的行应该是isCancelled: true
但是,当我运行这段代码时,我看到这样的东西:
#################################################### #################################################### - - - - - 取消!!! - - - - - - …