Sì, se la tua sorgente "esterna" è in realtà un altro codice eseguito in un singolo programma (non affatto raro, a proposito), la callback avviene quando l'altro codice sceglie di usarlo, ad esempio visitando qualcosa.
FWIW, Wikipedia dice qui :
In computer programming, a callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time. The invocation may be immediate as in a synchronous callback, or it might happen at a later time as in an asynchronous callback. In all cases, the intention is to specify a function or subroutine as an entity that is, depending on the language, more or less similar to a variable.
Direi che se usi il termine callback, senza dire sincrono o asincrono, deduco un callback sincrono, a causa della prospettiva storica e della cronologia sovraponderata della programmazione a thread singolo.
Anche una callback asincrona non implica necessariamente multi-threading o simultaneità; Wikipedia dice che i callback asincroni e differiti vengono semplicemente eseguiti in un secondo momento, non necessariamente contemporaneamente.
Direi che quando hai simultaneità o multi-threading dovresti probabilmente usare il callback del termine task over (asincrono).