Dart 当多个未来/计时器同时完成时是否存在竞争条件
如果在Dart中同时完成多个计时器/未来,是否会有竞争条件?例如,在以下代码中访问计时器完成处理程序中的Dart 当多个未来/计时器同时完成时是否存在竞争条件,dart,race-condition,Dart,Race Condition,如果在Dart中同时完成多个计时器/未来,是否会有竞争条件?例如,在以下代码中访问计时器完成处理程序中的test和test结构时是否存在竞争条件 import 'dart:async'; void main() { Map<String, int> test = {}; List<int> test2 = []; Timer t1 = Timer(Duration(seconds: 1), () { test['a'] = 45; test
test
和test
结构时是否存在竞争条件
import 'dart:async';
void main() {
Map<String, int> test = {};
List<int> test2 = [];
Timer t1 = Timer(Duration(seconds: 1), () {
test['a'] = 45;
test2.add(1);
});
Timer t2 = Timer(Duration(seconds: 1), () {
test['b'] = 67;
test2.add(2);
});
Timer t3 = Timer(Duration(seconds: 2), () {
print(test);
print(test2);
});
}
导入'dart:async';
void main(){
Map test={};
列表test2=[];
计时器t1=计时器(持续时间(秒数:1),(){
测试['a']=45;
测试2.添加(1);
});
计时器t2=计时器(持续时间(秒:1),(){
测试['b']=67;
test2.add(2);
});
计时器t3=计时器(持续时间(秒数:2),(){
打印(测试);
打印(测试2);
});
}
或者,计时器/未来完成是否由主线程同步处理?两个回调中的代码可以相互交织吗?每个Dart隔离在一个线程中执行代码。在单个Dart隔离中运行的异步代码可以并发运行,但不能并行运行 通常,如果回调本身执行异步工作,那么它们可以被交错。任何
wait
(相当于任何Future.then()
回调)是执行返回到事件循环的点,中断异步函数
在您的特定示例中,回调是完全同步的,不能被中断。由于事件已添加到FIFO队列,因此您的计时器可能会按定义的顺序启动。然而,这似乎很脆弱,我不认为依赖回调排序是一个好主意
另请参见:.每个Dart隔离在单个线程中执行代码。在单个Dart隔离中运行的异步代码可以并发运行,但不能并行运行
通常,如果回调本身执行异步工作,那么它们可以被交错。任何wait
(相当于任何Future.then()
回调)是执行返回到事件循环的点,中断异步函数
在您的特定示例中,回调是完全同步的,不能被中断。由于事件已添加到FIFO队列,因此您的计时器可能会按定义的顺序启动。然而,这似乎很脆弱,我不认为依赖回调排序是一个好主意
另请参见: