import "dart:async"; Future currentTime(int forExp) async { DateTime now; for (int i = 0; i < 3; i++) { now = new DateTime.now(); print("- exp${forExp}:current-time[${i}] = ${now}"); } return now; } Future exp1() async { print("* exp1:start"); DateTime now = await currentTime(1); print("* exp1:result=${now}"); return null; } Future exp2() async { print("* exp2:start"); Future result = currentTime(2); result ..then((DateTime now) { print("* exp2:result=${now}"); }) ..whenComplete(() { print("* exp2:complete"); }); print("* exp2:reaching-flow-end"); return result; } void main() { Future.wait([exp1(), exp2()]).whenComplete(() { print("all future complete"); }); print("reach end of main function"); }