D'après les exemples de goyave que j'ai vus, j'ai cherché des solutions élégantes à mon problème. Plus précisément, j'aime la façon dont Futures.addCallback(ListenableFuture, FutureCallback)
fonctionne, mais j'aimerais pouvoir définir un délai d'attente avant que le FutureCallback ne soit invoqué. De manière optimale, il serait bon que le dépassement du délai entraîne l'appel de la condition d'échec de FutureCallback.
Est-ce que Guava a déjà quelque chose comme ça ? Est-il simplement déconseillé d'essayer de coupler les délais d'attente avec les rappels ?
EDIT : Incluant un exemple du code qui m'a conduit à ce point. Évidemment, j'ai enlevé les parties significatives pour obtenir un exemple minimum.
@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);
}
}
Ce code n'imprimera que catch:java.util.concurrent.TimeoutException
.