Signals may be triggered from within any thread context by calling the signal or signalFinalize method on a signal event object. However, subsequent execution of the onSignal method of any attached signalable objects will always take place within the main reactor thread context. By ensuring that all callbacks take place within the same thread context, synchronisation between callbacks is much simplified. One limitation is that signals may not be subscribed and unsubscribed within the context of an onSignal callback handler and attempting to do so will result in a SignalContextException being thrown.