@Contract(pure = true)
    private <V> V callWrapped(@Async.Execute @NotNull Callable<V> computation) throws Exception {
      long startedAtNs = System.nanoTime();
      try {
        V result = computation.call();

        finalizedExecutionsCount.incrementAndGet();
        long finishedAtNs = System.nanoTime();
        long durationUs = NANOSECONDS.toMicros(finishedAtNs - startedAtNs);
        finalizedExecutionTimeUs.addAndGet(durationUs);

        return result;
      }
      catch (Throwable t) {
        failedExecutionsCount.incrementAndGet();
        long finishedAtNs = System.nanoTime();
        long durationUs = NANOSECONDS.toMicros(finishedAtNs - startedAtNs);
        failedExecutionTimeUs.addAndGet(durationUs);
        throw t;
      }
    }
@Contract(pure = true)
    private <V> V callWrapped(@Async.Execute @NotNull Callable<V> computation)