Your code is a traditional, synchronous call of method "calc", with some unnecessary extras resembling an active object.
Indeed there is no such thing as "asynchronous method call". Active objects are to be used for non-blocking waiting for an event, they are something like callbacks with improvements (priority, mutual exclusion and "thread-safety" - since being triggered, they run in the same thread, one after the other).
For a non-blocking long running calculation, you can create a low-priority active object:
Where "do something quickly" can be one or a few steps of an unrolled/split loop, a larger switch, or the mix of the two. RunL will start over shortly after the RequestComplete, but higher priority AOs can run between the invocations of your RunL.
... do something quickly ...
... if not ready:
However, if the switch is going to be huge, you should rather consider starting a new thread instead.