Mi tarea es simple para descargar un archivo desde una URL usando selenio. Lo hice hasta que al hacer clic en la parte de descarga. Ahora quiero esperar a que el archivo es downloaded.Fine. Yo uso siguiente y hecho.
do {
Thread.sleep(60000);
}
while ((downloadeBuild.length()/1024) < 138900);
Ahora reto es que la cantidad de tiempo he esperado? ¿Puedo establecer un umbral? No puedo pensar en es el uso de un contador en tiempo y tareas de verificación hasta el contador va a 10 o algo por el estilo? Pero de otra manera en Java? Como tal no tengo ninguna acción para hacer hasta el archivo se descarga.
¿Qué tal esto?
Creo que el uso TimeOut
no es estable ya que no hay necesidad de esperar a que un no-predecible operación de descarga.
Sólo se puede recurrir a CompletableFuture
usar supplyAsync
para hacer la descarga y utilizar thenApply
para hacer el procesamiento / conversión y recuperar el resultado de join
la siguiente manera:
public class SimpleCompletableFuture {
public static void main(String... args) {
testDownload();
}
private static void testDownload() {
CompletableFuture future = CompletableFuture.supplyAsync(() -> downloadMock())
.thenApply(SimpleCompletableFuture::processDownloaded);
System.out.println(future.join());
}
private static String downloadMock() {
try {
Thread.sleep(new Random().nextInt() + 1000); // mock the downloading time;
} catch (InterruptedException ignored) {
ignored.printStackTrace();
}
return "Downloaded";
}
private static String processDownloaded(String fileMock) {
System.out.println("Processing " + fileMock);
System.out.println("Done!");
return "Processed";
}
}