O momento conveniente do tempo pode ser de imediato ou não. Isso significa que teremos, respectivamente, dois tipos de Callbacks: síncronos e assíncronos. Ou seja, um Callback é um procedimento/função/método que é passado como argumento para outro procedimento/função/método que é invocado após algum evento ou condição.
Existem dois tipos de Callbacks que diferem na forma como o controle do fluxo de execução é realizado:
Enquanto blocking Callback é invocado antes de uma função retornar, deferred Callback pode ser invocado durante ou após uma função retornar. Deferred Callback são frequentemente utilizadas em contexto de operações de I/O, manipulação de eventos de GUI, interrupções e por diferentes threads em casos de ambientes de múltiplas threads. Devido a sua natureza, blocking Callbacks não podem trabalhar sem interrupções ou com múltiplas threads, o que significa que blocking Callbacks não são comumente utilizadas para sincronização ou delegação de trabalho para outra thread.