Say I am doing an Ask()
on actor with some timeout, if the ask timesout, is there a way to get the underlying actor to stop processing things? For example, I don't want the main thread / caller to continue and this actor is still processing the timed out request
Short answer is no, you cannot do it.
Long answer is it depends.
You could move actor's work to another execution context via a Future
for example. This will allow your actor react on other messages but that Future
that actor has started cannot be cancelled if it was picked up by an execution context and not hanging in the queue of the execution context.
You could write some smart Future
wrapper that would check if future was cancelled before starting the work. But if processing has started, the only thing you can do is calling interrupt
on the thread executing the future (meaning that you need to capture this thread somehow) and hopping that the work will hit Object.wait
or Thread.sleep
methods, ie the only places when the interrupt exception can be received. But there is no guarantee of this ever happening.