本文整理了Java中io.trane.future.Future.ensure()
方法的一些代码示例,展示了Future.ensure()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Future.ensure()
方法的具体详情如下:
包路径:io.trane.future.Future
类名称:Future
方法名:ensure
[英]Runs r when this future completes.
[中]当这个未来完成时运行r。
代码示例来源:origin: traneio/future
@Override
final Future<T> apply(final Future<T> result) {
return result.ensure(f);
}
}
代码示例来源:origin: traneio/future
@Benchmark
public Void ensureConstN() throws CheckedFutureException {
Future<Void> f = constVoidFuture;
for (int i = 0; i < N.n; i++)
f = f.ensure(ensureF);
return f.get(Duration.ofMillis(Long.MAX_VALUE));
}
代码示例来源:origin: traneio/future
@Benchmark
public Void ensureConst() throws CheckedFutureException {
return constVoidFuture.ensure(ensureF).get(Duration.ofMillis(Long.MAX_VALUE));
}
代码示例来源:origin: traneio/ndbc
private final <T> InterruptHandler handler(final Promise<T> p) {
return ex -> {
final DataSource<PreparedStatement, Row> ds = dataSourceSupplier.get();
ds.execute("KILL QUERY " + connectionId)
.onFailure(e -> log.warn("Can't cancel request. Reason: " + e))
.ensure(() -> ds.close());
};
}
代码示例来源:origin: traneio/ndbc
private final <T> Future<T> withConnection(final Function<Connection, Future<T>> f) {
final Optional<Connection> transaction = currentTransaction.get();
if (transaction.isPresent())
return f.apply(transaction.get());
else
return pool.acquire().flatMap(c -> {
return Future.flatApply(() -> f.apply(c)).ensure(() -> pool.release(c));
});
}
代码示例来源:origin: traneio/future
@Benchmark
public Void ensurePromiseN() throws CheckedFutureException {
Promise<Void> p = Promise.apply();
Future<Void> f = p;
for (int i = 0; i < N.n; i++)
f = f.ensure(ensureF);
p.setValue(null);
return f.get(Duration.ofMillis(Long.MAX_VALUE));
}
代码示例来源:origin: traneio/ndbc
private final <T> Future<T> run(final Exchange<T> exchange) {
final Promise<T> next = Promise.create(this::handler);
final Future<?> previous = mutex.getAndSet(next);
if (previous == null)
next.become(execute(exchange));
else
previous.ensure(() -> next.become(execute(exchange)));
return next;
}
代码示例来源:origin: traneio/ndbc
private final <T> Future<T> run(final Exchange<T> exchange) {
final Promise<T> next = Promise.create(this::handler);
final Future<?> previous = mutex.getAndSet(next);
if (previous == null)
next.become(execute(exchange));
else
previous.ensure(() -> next.become(execute(exchange)));
return next;
}
代码示例来源:origin: traneio/ndbc
private final Future<Void> validateN(final int n) {
if (n >= 0) {
final T item = items.poll();
if (item == null)
return Future.VOID;
else
return item.isValid().rescue(e -> Future.FALSE).flatMap(valid -> {
if (!valid)
return item.close().rescue(e -> Future.VOID).ensure(() -> sizeSemaphore.release());
else {
items.offer(item);
return Future.VOID;
}
}).flatMap(v -> validateN(n - 1));
} else
return Future.VOID;
}
代码示例来源:origin: traneio/future
/**
* Selects the index of the first satisfied future.
*
* @param list the list of futures to select from
* @return a future with the index of the first satisfied future of the list.
*/
public static <T> Future<Integer> selectIndex(final List<Future<T>> list) {
switch (list.size()) {
case 0:
return Future.exception(new IllegalArgumentException("Can't select from empty list."));
case 1:
return list.get(0).map(v -> 0);
default:
final Promise<Integer> p = Promise.apply(list);
int i = 0;
for (final Future<?> f : list) {
if (f instanceof SatisfiedFuture)
return Future.value(i);
final int ii = i;
f.ensure(() -> p.becomeIfEmpty(Future.value(ii)));
i++;
}
return p;
}
}
代码示例来源:origin: traneio/ndbc
@Override
public final <T> Future<T> transactional(final Supplier<Future<T>> supplier) {
if (currentTransaction.get().isPresent())
return Future.flatApply(supplier);
else
return pool.acquire().flatMap(c -> {
currentTransaction.set(Optional.of(c));
return c.beginTransaction().flatMap(v -> supplier.get()).transformWith(new Transformer<T, Future<T>>() {
@Override
public Future<T> onException(final Throwable ex) {
currentTransaction.set(Optional.empty());
return c.rollback().flatMap(v -> Future.exception(ex));
}
@Override
public Future<T> onValue(final T value) {
currentTransaction.set(Optional.empty());
return c.commit().map(v -> value);
}
}).ensure(() -> pool.release(c));
});
}
内容来源于网络,如有侵权,请联系作者删除!