Asynchronous services will create and execute in their own thread. They cannot have a return value since, when you run them the thread is created and runs independently on the platform. If called from within another service the calling service will not wait for the async service to complete. This can be very useful for long running services, especially ones on timers, that update background data structure or perform system maintenance tasks.
1. No, there is no guarantee of completion. The service thread will run but in the case of failure will no persist it's status and continue after recovery.
2. Resource usage is handled by the JVM just as all other transaction on the platform. Currently there is no direct view/control on the amount of resource usage, it is allocated based on the need of that service to execute and the settings of the JVM in Tomcat.