Basado en los ejemplos de guayaba que he visto, he estado buscando soluciones elegantes para mi problema. Específicamente, me gusta la forma en que funciona Futures.addCallback(ListenableFuture, FutureCallback)
, pero me gustaría poder establecer un tiempo de espera sobre el período de tiempo que puede caducar antes de invocar FutureCallback. Óptimo Sería bueno si incumplir el tiempo de espera solo causara que se llame a la condición de falla de FutureCallback.ListenableFuture, FutureCallback y timeouts
¿La guayaba ya tiene algo como esto? ¿No es recomendable intentar emparejar tiempos de espera con las devoluciones de llamada?
EDITAR: Incluye ejemplo del código que me llevó a este punto. Obviamente, eliminé las partes significativas para obtener un ejemplo mínimo.
@Test
public void testFuture()
{
Callable<Boolean> callable = new Callable<Boolean>()
{
@Override
public Boolean call() throws Exception
{
while(true);
}
};
ListenableFuture<Boolean> callableFuture = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()).submit(callable);
Futures.addCallback(callableFuture, new FutureCallback<Boolean>()
{
@Override
public void onFailure(Throwable arg0)
{
System.out.println("onFailure:"+arg0);
}
@Override
public void onSuccess(Boolean arg0)
{
System.out.println("onSuccess:"+arg0);
}
});
try
{
callableFuture.get(1000, TimeUnit.MILLISECONDS);
}catch(Throwable t)
{
System.out.println("catch:"+t);
}
}
Este código solo se imprimirá catch:java.util.concurrent.TimeoutException
.
Gracias por la entrada. Abrí la solicitud [aquí] (http://code.google.com/p/guava-libraries/issues/detail?id=1146&thanks=1146&ts=1347504235). –