How can we assign vehicles to requests in real time, the instant a call arrives or a vehicle becomes free? We model this asynchronous dispatching problem as a semi-Markov decision process and solve it by combining discrete-event simulation with deep reinforcement learning, validated on real New York City taxi data.