Fortunately, asynchronous programs also provide us with new opportunities for optimizations that are absent in synchronous programs.
if we want to reuse the computation from the pre-execution of an event, we would have to invest in some fairly complex hardware to check for any dependencies between events and recover from mis-speculations.