问题本身就说明了这一点,这里我有一个列表,它write多次调用方法,但它没有按顺序提供输出。
void main() {
List<int> list = [1, 2, 3, 4];
write(list);
write(list);
}
Run Code Online (Sandbox Code Playgroud)
write函数获取列表并延迟 1 毫秒打印值
write(List<int> values) async {
for (int value in values) {
await Future.delayed(new Duration(microseconds: 1));
print(value);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
I/flutter (21092): 1
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 3
I/flutter (21092): 4
I/flutter (21092): 4
Run Code Online (Sandbox Code Playgroud)
预期输出:
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4
Run Code Online (Sandbox Code Playgroud)
为了实现这个使用synchronizedlib
将其添加到包的 pubspec.yaml 文件中:
dependencies:
synchronized: ^2.2.0+2
Run Code Online (Sandbox Code Playgroud)
代码片段:
write(List<int> values) async {
var lock = Lock();
for (int value in values) {
lock.synchronized(() {
Future.delayed(new Duration(seconds: 2));
});
print(value);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4
Run Code Online (Sandbox Code Playgroud)
注意: synchronized block将首先运行所有列表,然后只允许进入第二个。
| 归档时间: |
|
| 查看次数: |
7040 次 |
| 最近记录: |