Understanding synchronous and asynchronous execution