In het uitvoeringsmodel van een mono-threaded programma kan de uitvoeringsstroom niet worden onderbroken door gegevens die terugkomen van een asynchrone query, of meer in het algemeen een netwerksocket. Alleen signalen (SIGTERM
en vrienden) kunnen de stroom onderbreken, maar signalen kunnen niet worden gekoppeld aan gegevens die binnenkomen.
Daarom is het niet mogelijk om teruggebeld te worden om een melding te krijgen van inkomende gegevens. Het stukje code in libpq dat nodig zou zijn om de callback uit te zenden, zou nooit worden uitgevoerd als uw code het niet aanroept. En als je het moet bellen, verslaat dat het hele punt van terugbellen.
Er zijn bibliotheken zoals Qt
die callbacks bieden, maar ze zijn van de grond af opgebouwd met een hoofdlus die fungeert als een gebeurtenisprocessor. De gebruikerscode is georganiseerd in callbacks en gebeurtenisgebaseerde verwerking van inkomende gegevens is mogelijk. Maar in dit geval wordt de bibliotheek eigenaar van de uitvoeringsstroom, wat betekent dat de hoofdlus de gegevensbronnen ondervraagt. Dat verschuift de verantwoordelijkheid alleen maar naar een ander stukje code buiten libpq.