startAsync() can be called multiple times, and always returns the same instance of AsyncContext.
startAsync():
...
This method clears the list of AsyncListener instances (if any) that were registered with the AsyncContext returned by the previous call to one of the startAsync methods, after calling each AsyncListener at its onStartAsync method.
Subsequent invocations of this method, or its overloaded variant, will return the same AsyncContext instance, reinitialized as appropriate.
Returns:
the (re)initialized AsyncContext
If you want your listener to stay registered, even if some other code calls startAsync(), it needs to be re-registered in it's onStartAsync(AsyncEvent) method.