You have to call context.complete() from within your asynchronous task. No, you cannot use context.execute() for that; that uses a service thread. You need a separate thread pool for blocking tasks.
I think though that overall you might want to think about avoiding hooking into the AS at this level.