How to reconcile the different definitions of asynchrony? There are 3 definitions of asynchrony that I know of:

In event-based programming, asynchrony refers to the execution of tasks in a non-sequential way, which may involve creating another thread. For example with AJAX, we can perform HTTP requests and handle their response in a new thread so that the program doesn't block to wait for results.

In communication, a channel is asynchronous if both parties don't need to be present at the same time (e.g., emails), and synchronous if they do (e.g., telephone).

In distributed systems, an asynchronous model is one where messages may take an arbitrary long time to transit. It implies that there is no way to know for sure if a node has crashed or it/the network is just being slow.


However I struggle to reconcile these 3 definitions. Is there a common denominator that I'm missing, or is the term asynchrony used in 3 completely different contexts?
Thank you for your help.
The unifying definition is that one part of the system triggers an event in another part of the system, and the triggerer does not know when the event will take place.
To put it another way: in a synchronous system, you know when things (will) happen. In an asynchronous system, you don't know when things (will) happen.
In event-based programming, a thread creates another thread, and then it has no control over when the thread will do its job. For example, with AJAX, the new theard performs an HTTP request, and the original thread continues executing without knowing when the HTTP response comes back.
In communication over an asynchronous channel, the sender of a message does not know or care when the recipient will be available receive the message.
In an asynchronous distributed system, the sender of a message does not know when (or possibly even whether) the recipient will receive the message and potentially reply to it.