Asyncs are a means of deferring the excution of Scheme code until it is safe to do so.
Guile provides two kinds of asyncs that share the basic concept but are otherwise quite different: system asyncs and user asyncs. System asyncs are integrated into the core of Guile and are executed automatically when the system is in a state to allow the execution of Scheme code. For example, it is not possible to execute Scheme code in a POSIX signal handler, but such a signal handler can queue a system async to be executed in the near future, when it is safe to do so.
System asyncs can also be queued for threads other than the current one. This way, you can cause threads to asynchronously execute arbitrary code.
User asyncs offer a convenient means of queueing procedures for future execution and triggering this execution. They will not be executed automatically.