Is module.run() async or sync?

According to How to make get_output function faster?, modue.run() is async. However, when I tried some experiment with following codes, module.run() seems sync.

module1 = graph_executor.create(graph, mod, tvm.cuda(0))
module2 = graph_executor.create(graph, mod, tvm.cuda(1))
module1.set_input("input", input_data)
module1.set_input(**params)
module2.set_input("input", input_data)
module2.set_input(**params) 
# Elapsed time here = 0 ms
module1.run() 
# Elapsed time here = 150 ms
module2.run()
# Elapsed time here = 300 ms. If run() is async, here should be about 150ms
out1 = module1.get_output(0)
out2 = module2.get_output(0) # Elapsed time here = 301 ms

And I cannot find any evidence that module.run() is async when I looked into source codes. Which one is correct? Is module.run() async or sync?