### Question:
FiberAsync implements java.io.Serializable { @SuppressWarnings("empty-statement") public V run() throws E, SuspendExecution, InterruptedException { if (fiber == null) return runSync(); if (registrationComplete) throw new IllegalStateException("This FiberAsync instance has already been used"); Fiber.verifySuspend(fiber); fiber.record(1, "FiberAsync", "run", "Blocking fiber %s on FiberAsync %s", fiber, this); while (!Fiber.park(this, new Fiber.ParkAction() { @Override public void run(Fiber current) { try { current.record(1, "FiberAsync", "run", "Calling requestAsync on class %s", this); registrationThread = Thread.currentThread(); requestAsync(); current.record(1, "FiberAsync", "run", "requestAsync on %s done", FiberAsync.this); } catch (Throwable t) { asyncFailed(t); } finally { registrationComplete = true; } } })) { checkInterrupted(); } while (!completed) { checkInterrupted(); Fiber.park(this); } assert isCompleted() : "Unblocker: " + Fiber.currentFiber().getUnparker() + " " + Strand.toString(Fiber.currentFiber().getUnparkStackTrace()); return getResult(); } FiberAsync();  FiberAsync(boolean immediateExec); @SuppressWarnings("empty-statement") V run(); @SuppressWarnings("empty-statement") V run(final long timeout, final TimeUnit unit); V run(Timeout timeout); final boolean isCompleted(); final V getResult(); static V runBlocking(final ExecutorService exec, final CheckedCallable<V, E> callable); static V runBlocking(final ExecutorService exec, long timeout, TimeUnit unit, final CheckedCallable<V, E> callable); static V runBlocking(final ExecutorService exec, Timeout timeout, final CheckedCallable<V, E> callable);  }### Answer:
@Test public void testAsyncCallbackExceptionInRequestAsync() throws Exception { final Fiber fiber = new Fiber(scheduler, new SuspendableRunnable() { @Override public void run() throws SuspendExecution { try { new FiberAsync<String, RuntimeException>() { @Override protected void requestAsync() { throw new RuntimeException("requestAsync exception!"); } }.run(); fail(); } catch (Exception e) { assertThat(e.getMessage(), equalTo("requestAsync exception!")); } } }).start(); fiber.join(); }