Guava'nın örneklerine dayanarak, sorunuma zarif çözümler aradığımı gördüm. Özellikle, Futures.addCallback(ListenableFuture, FutureCallback)
çalışma şeklini seviyorum, ancak FutureCallback çağrılmadan önce zaman aşımına uğrayabilecek bir zaman aşımı ayarlayabilmek istiyorum. Optimal Zaman aşımını ihlal etmesi, sadece FutureCallback'in çağrılması gereken bir arıza durumuna yol açması hoş olurdu.ListenableFuture, FutureCallback ve zaman aşımları
Guava'nın halihazırda böyle bir şey var mı? Geri aramalarla zaman aşımlarını eşleştirmeyi denemeniz tavsiye edilmiyor mu?
DÜZENLEME: Beni bu noktaya yönlendiren kodun örneği dahil. Açıkçası, asgari bir örnek almak için anlamlı bitleri çıkardım.
@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);
}
}
Bu kod yalnızca catch:java.util.concurrent.TimeoutException
'u basacaktır.
Inisght için teşekkürler. İsteği şu anda açtım (http://code.google.com/p/guava-libraries/issues/detail?id=1146&thanks=1146&ts=1347504235). –