我有以下Dart程序:
import 'package:pedantic/pedantic.dart';
Future someFunc() async {
for (var i = 0; i < 100; i++) {
print('Value of i in someFunc(): ' + i.toString());
}
}
Future someOtherFunc() async {
for (var i = 0; i < 100; i++) {
print('Value of i in someOtherFunc(): ' + i.toString());
}
}
Future<int> main() async {
unawaited(someFunc());
unawaited(someOtherFunc());
print('End of program...');
return 0;
}
执行此操作时,输出为:
Value of i in someFunc(): 0
Value of i in someFunc(): 1
Value of i in someFunc(): 2
...
Value of i in someFunc(): 99
Value of i in someOtherFunc(): 0
Value of i in someOtherFunc(): 1
Value of i in someOtherFunc(): 2
...
Value of i in someOtherFunc(): 99
End of program...
似乎所有内容都是同步执行的。我期待着这样的事情:
Value of i in someFunc(): 0
Value of i in someFunc(): 1
Value of i in someOtherFunc(): 0
Value of i in someFunc(): 3
End of program...
Value of i in someOtherFunc(): 1
(etc...)
如何在Dart中创建异步的“即发即弃”功能/方法?
答案 0 :(得分:3)
之所以看到此代码是同步执行的,是因为Dart中的异步方法的执行就好像它们是同步的 直到第一个#> if (x == TRUE) print("y")
一样,此时该方法的执行是暂停,直到await
完成为止。如果您在方法中执行实际的异步工作,则会看到与您期望的交错执行。
例如,这是对代码的一些轻微修改,将大致导致您期望的行为:
await
我强烈建议您阅读Dart event loop and microtask queue,这将使您更好地理解Dart中异步的工作原理